38 lines
1.6 KiB
Python
38 lines
1.6 KiB
Python
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from modules.fulfillment_base.models import DealService
|
|
from modules.fulfillment_base.repositories import DealServiceRepository
|
|
from modules.fulfillment_base.schemas.deal_service import *
|
|
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="Услуга удалена из сделки")
|