Files
Crm-Backend/modules/fulfillment_base/services/deal_service.py

54 lines
2.3 KiB
Python

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="Комплект добавлен в сделку")