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