From 1b46a0fc565e58681d0b90faca3e76d1f5071499 Mon Sep 17 00:00:00 2001 From: fakz9 Date: Sat, 10 Aug 2024 06:53:10 +0300 Subject: [PATCH] feat: deals table --- routers/deal.py | 5 +++-- schemas/deal.py | 1 + services/deal.py | 47 +++++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 47 insertions(+), 6 deletions(-) diff --git a/routers/deal.py b/routers/deal.py index 42a8512..c6daf6c 100644 --- a/routers/deal.py +++ b/routers/deal.py @@ -75,9 +75,10 @@ async def change_status( dependencies=[Depends(authorized_user)] ) async def get_summary( - session: Annotated[AsyncSession, Depends(get_session)] + session: Annotated[AsyncSession, Depends(get_session)], + full: Optional[bool] ): - return await DealService(session).get_summary() + return await DealService(session).get_summary(full) @deal_router.post( diff --git a/schemas/deal.py b/schemas/deal.py index 6c79059..19653f5 100644 --- a/schemas/deal.py +++ b/schemas/deal.py @@ -26,6 +26,7 @@ class DealSummary(BaseSchema): name: str client_name: str changed_at: datetime.datetime + created_at: datetime.datetime deadline: datetime.datetime status: int total_price: int diff --git a/services/deal.py b/services/deal.py index 6f1e398..2d274cf 100644 --- a/services/deal.py +++ b/services/deal.py @@ -165,7 +165,7 @@ class DealService(BaseService): ) return final_subquery - async def get_summary(self) -> DealSummaryResponse: + async def get_summary(self, full: bool = False) -> DealSummaryResponse: price_subquery = self._get_price_subquery() q = ( select( @@ -184,10 +184,15 @@ class DealService(BaseService): price_subquery, Deal.id == price_subquery.c.deal_id) .where( Deal.is_deleted == False, + ) + ) + if not full: + q = q.where( Deal.is_completed == False, Deal.current_status != DealStatus.COMPLETED ) - ) + else: + q = q.order_by(Deal.created_at.desc()) deals_query = await self.session.execute(q) summaries = [] for deal, total_price, rank in deals_query.all(): @@ -207,13 +212,47 @@ class DealService(BaseService): status=last_status.to_status, total_price=total_price, rank=rank, - base_marketplace=base_marketplace + base_marketplace=base_marketplace, + created_at=deal.created_at ) ) return DealSummaryResponse(summaries=summaries) async def get_all(self) -> DealGetAllResponse: - deals_query = await self.session.scalars(select(Deal).options(joinedload(Deal.client))) + deals_query = ( + await self.session.scalars( + select( + Deal + ) + .options( + joinedload(Deal.shipping_warehouse), + joinedload(Deal.client) + .joinedload(Client.details), + selectinload(Deal.services) + .options( + joinedload(models.secondary.DealService.service).joinedload(Service.category), + selectinload(models.secondary.DealService.employees) + ), + selectinload(Deal.products) + .joinedload(models.secondary.DealProduct.product) + .joinedload(models.Product.client), + selectinload(Deal.products) + .joinedload(models.secondary.DealProduct.product) + .joinedload(models.Product.barcodes), + selectinload(Deal.products) + .joinedload(models.secondary.DealProduct.services) + .options( + joinedload(models.secondary.DealProductService.service), + selectinload(models.secondary.DealProductService.employees) + ), + selectinload(Deal.status_history) + .joinedload(DealStatusHistory.user), + selectinload(Deal.status_history) + .noload(DealStatusHistory.deal), + + ) + ) + ) deals = deals_query.all() result = [] for deal in deals: