from fastapi import HTTPException from sqlalchemy.ext.asyncio import AsyncSession from repositories import DealRepository from schemas.deal import ( GetDealsResponse, DealSchema, UpdateDealResponse, UpdateDealRequest, CreateDealRequest, CreateDealResponse, DeleteDealResponse, ) class DealService: def __init__(self, session: AsyncSession): self.repository = DealRepository(session) async def get_deals(self, board_id: int) -> GetDealsResponse: deals = await self.repository.get_all(board_id) return GetDealsResponse( deals=[DealSchema.model_validate(deal) for deal in deals] ) async def create_deal(self, request: CreateDealRequest) -> CreateDealResponse: deal = await self.repository.create(request.entity) return CreateDealResponse( entity=DealSchema.model_validate(deal), message="Сделка успешно создана", ) async def update_deal(self, deal_id: int, request: UpdateDealRequest): deal = await self.repository.get_by_id(deal_id) if not deal: raise HTTPException(status_code=404, detail="Сделка не найдена") await self.repository.update(deal, request.entity) return UpdateDealResponse(message="Сделка успешно обновлена") async def delete_deal(self, deal_id: int) -> DeleteDealResponse: deal = await self.repository.get_by_id(deal_id) if not deal: raise HTTPException(status_code=404, detail="Сделка не найдена") await self.repository.delete(deal, False) return DeleteDealResponse(message="Сделка успешно удалена")