46 lines
1.9 KiB
Python
46 lines
1.9 KiB
Python
from fastapi import HTTPException
|
||
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
|
||
entity_not_found_msg = "Связь услуги со сделкой не найдена"
|
||
|
||
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)
|
||
if not entity:
|
||
raise HTTPException(status_code=404, detail=self.entity_not_found_msg)
|
||
|
||
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)
|
||
if not entity:
|
||
raise HTTPException(status_code=404, detail=self.entity_not_found_msg)
|
||
|
||
await self.repository.delete(entity)
|
||
return DeleteDealServiceResponse(message="Услуга удалена из сделки")
|