38 lines
1.6 KiB
Python
38 lines
1.6 KiB
Python
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from modules.fulfillment_base.models import DealProduct
|
|
from modules.fulfillment_base.repositories import DealProductRepository
|
|
from modules.fulfillment_base.schemas.deal_product import *
|
|
from services.mixins import ServiceGetAllMixin
|
|
|
|
|
|
class DealProductService(ServiceGetAllMixin[DealProduct, DealProductSchema]):
|
|
schema_class = DealProductSchema
|
|
|
|
def __init__(self, session: AsyncSession):
|
|
self.repository = DealProductRepository(session)
|
|
|
|
async def create(
|
|
self, request: CreateDealProductRequest
|
|
) -> CreateDealProductResponse:
|
|
await self.repository.create(request.entity)
|
|
deal_product = await self.repository.get_by_id(
|
|
request.entity.deal_id, request.entity.product_id
|
|
)
|
|
return CreateDealProductResponse(
|
|
entity=DealProductSchema.model_validate(deal_product),
|
|
message="Товар добавлен в сделку",
|
|
)
|
|
|
|
async def update(
|
|
self, deal_id: int, product_id: int, data: UpdateDealProductRequest
|
|
) -> UpdateDealProductResponse:
|
|
entity = await self.repository.get_by_id(deal_id, product_id)
|
|
await self.repository.update(entity, data.entity)
|
|
return UpdateDealProductResponse(message="Товар сделки обновлен")
|
|
|
|
async def delete(self, deal_id: int, product_id: int) -> DeleteDealProductResponse:
|
|
entity = await self.repository.get_by_id(deal_id, product_id)
|
|
await self.repository.delete(entity)
|
|
return DeleteDealProductResponse(message="Товар удален из сделки")
|