from sqlalchemy.ext.asyncio import AsyncSession from modules.fulfillment_base.models import DealService 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 class DealServiceService(ServiceGetAllMixin[DealService, DealServiceSchema]): schema_class = DealServiceSchema def __init__(self, session: AsyncSession): self.repository = DealServiceRepository(session) async def create( self, request: CreateDealServiceRequest ) -> CreateDealServiceResponse: await self.repository.create(request.entity) deal_service = await self.repository.get_by_id( request.entity.deal_id, request.entity.service_id ) return CreateDealServiceResponse( entity=DealServiceSchema.model_validate(deal_service), message="Услуга добавлена в сделку", ) async def update( self, deal_id: int, service_id: int, data: UpdateDealServiceRequest ) -> UpdateDealServiceResponse: entity = await self.repository.get_by_id(deal_id, service_id) await self.repository.update(entity, data.entity) return UpdateDealServiceResponse(message="Услуга сделки обновлена") async def delete(self, deal_id: int, service_id: int) -> DeleteDealServiceResponse: 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="Комплект добавлен в сделку")