feat: adding services kit to deal

This commit is contained in:
2025-09-16 18:13:19 +04:00
parent 98d3026e0d
commit 1a9dbd857a
10 changed files with 102 additions and 62 deletions

View File

@ -1,19 +1,13 @@
from fastapi import HTTPException
from sqlalchemy.ext.asyncio import AsyncSession
from modules.fulfillment_base.models import DealProduct
from modules.fulfillment_base.repositories import (
DealProductRepository,
ServicesKitRepository,
ProductServiceRepository,
)
from modules.fulfillment_base.repositories import DealProductRepository
from modules.fulfillment_base.schemas.deal_product import *
from services.mixins import ServiceGetAllMixin
class DealProductService(ServiceGetAllMixin[DealProduct, DealProductSchema]):
schema_class = DealProductSchema
entity_not_found_msg = "Связь товара со сделкой не найдена"
def __init__(self, session: AsyncSession):
self.repository = DealProductRepository(session)
@ -34,33 +28,10 @@ class DealProductService(ServiceGetAllMixin[DealProduct, DealProductSchema]):
self, deal_id: int, product_id: int, data: UpdateDealProductRequest
) -> UpdateDealProductResponse:
entity = await self.repository.get_by_id(deal_id, product_id)
if not entity:
raise HTTPException(status_code=404, detail=self.entity_not_found_msg)
await self.repository.update(entity, data.entity)
return UpdateDealProductResponse(message="Товар сделки обновлен")
async def delete(self, deal_id: int, product_id: int) -> DeleteDealProductResponse:
entity = await self.repository.get_by_id(deal_id, product_id)
if not entity:
raise HTTPException(status_code=404, detail=self.entity_not_found_msg)
await self.repository.delete(entity)
return DeleteDealProductResponse(message="Товар удален из сделки")
async def add_services_kit(
self, request: DealProductAddKitRequest
) -> DealProductAddKitResponse:
services_kit_repo = ServicesKitRepository(self.repository.session)
services_kit = await services_kit_repo.get_by_id(request.kit_id)
deal_product = await self.repository.get_by_id(request.deal_id, request.product_id)
product_service_repo = ProductServiceRepository(self.repository.session)
await product_service_repo.delete_product_services(
request.deal_id, [request.product_id]
)
await self.repository.add_services_kit(deal_product, services_kit)
return DealProductAddKitResponse(message="Комплект добавлен в товар")

View File

@ -1,8 +1,12 @@
from sqlalchemy.ext.asyncio import AsyncSession
from modules.fulfillment_base.models import DealService
from modules.fulfillment_base.repositories import DealServiceRepository
from modules.fulfillment_base.repositories import (
DealServiceRepository,
ServicesKitRepository,
)
from modules.fulfillment_base.schemas.deal_service import *
from repositories import DealRepository
from services.mixins import ServiceGetAllMixin
@ -35,3 +39,15 @@ class DealServiceService(ServiceGetAllMixin[DealService, DealServiceSchema]):
entity = await self.repository.get_by_id(deal_id, service_id)
await self.repository.delete(entity)
return DeleteDealServiceResponse(message="Услуга удалена из сделки")
async def add_services_kit(self, request: DealAddKitRequest) -> DealAddKitResponse:
services_kit_repo = ServicesKitRepository(self.repository.session)
services_kit = await services_kit_repo.get_by_id(request.kit_id)
deal_repo = DealRepository(self.repository.session)
deal = await deal_repo.get_by_id(request.deal_id)
await self.repository.delete_deal_services(request.deal_id)
await self.repository.add_services_kit(deal, services_kit)
return DealAddKitResponse(message="Комплект добавлен в сделку")

View File

@ -1,8 +1,11 @@
from fastapi import HTTPException
from sqlalchemy.ext.asyncio import AsyncSession
from modules.fulfillment_base.models import DealProductService
from modules.fulfillment_base.repositories import ProductServiceRepository
from modules.fulfillment_base.repositories import (
ProductServiceRepository,
ServicesKitRepository,
DealProductRepository,
)
from modules.fulfillment_base.schemas.product_service import *
@ -34,8 +37,6 @@ class ProductServiceService:
data: UpdateProductServiceRequest,
) -> UpdateProductServiceResponse:
entity = await self.repository.get_by_id(deal_id, product_id, service_id)
if not entity:
raise HTTPException(status_code=404, detail=self.entity_not_found_msg)
await self.repository.update(entity, data.entity)
return UpdateProductServiceResponse(message="Услуга обновлена")
@ -44,9 +45,6 @@ class ProductServiceService:
self, deal_id: int, product_id: int, service_id: int
) -> DeleteProductServiceResponse:
entity = await self.repository.get_by_id(deal_id, product_id, service_id)
if not entity:
raise HTTPException(status_code=404, detail=self.entity_not_found_msg)
await self.repository.delete(entity)
return DeleteProductServiceResponse(message="Товар удален из сделки")
@ -63,3 +61,21 @@ class ProductServiceService:
request.deal_id, request.target_deal_product_ids, services_to_copy
)
return ProductServicesDuplicateResponse(message="Услуги продублированы")
async def add_services_kit(
self, request: DealProductAddKitRequest
) -> DealProductAddKitResponse:
services_kit_repo = ServicesKitRepository(self.repository.session)
services_kit = await services_kit_repo.get_by_id(request.kit_id)
deal_product_repo = DealProductRepository(self.repository.session)
deal_product = await deal_product_repo.get_by_id(
request.deal_id, request.product_id
)
await self.repository.delete_product_services(
request.deal_id, [request.product_id]
)
await self.repository.add_services_kit(deal_product, services_kit)
return DealProductAddKitResponse(message="Комплект добавлен в товар")