From b9ae3bc18a9ca35327983a771de06e4c4fcefbab Mon Sep 17 00:00:00 2001 From: AlexSserb Date: Mon, 1 Sep 2025 20:33:40 +0400 Subject: [PATCH] feat: status and board in deal schema --- repositories/deal.py | 16 +++++++++++++--- schemas/deal.py | 6 ++++-- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/repositories/deal.py b/repositories/deal.py index 5ea36ac..27a7f5c 100644 --- a/repositories/deal.py +++ b/repositories/deal.py @@ -1,6 +1,7 @@ from typing import Optional from sqlalchemy import select +from sqlalchemy.orm import joinedload from models import Deal, CardStatusHistory, Board from repositories.base import BaseRepository @@ -22,7 +23,11 @@ class DealRepository(BaseRepository): id: Optional[int], name: Optional[str], ) -> tuple[list[Deal], int]: - stmt = select(Deal).where(Deal.is_deleted.is_(False)) + stmt = ( + select(Deal) + .options(joinedload(Deal.status), joinedload(Deal.board)) + .where(Deal.is_deleted.is_(False)) + ) if id: stmt = stmt.where(Deal.id == id) @@ -49,7 +54,11 @@ class DealRepository(BaseRepository): return list(result.scalars().all()), total_items async def get_by_id(self, deal_id: int) -> Optional[Deal]: - stmt = select(Deal).where(Deal.id == deal_id, Deal.is_deleted.is_(False)) + stmt = ( + select(Deal) + .options(joinedload(Deal.status), joinedload(Deal.board)) + .where(Deal.id == deal_id, Deal.is_deleted.is_(False)) + ) result = await self.session.execute(stmt) return result.scalar_one_or_none() @@ -58,7 +67,8 @@ class DealRepository(BaseRepository): self.session.add(deal) await self.session.commit() await self.session.refresh(deal) - return deal + print(deal.id) + return await self.get_by_id(deal.id) async def update(self, deal: Deal, data: UpdateDealSchema) -> Deal: deal.lexorank = data.lexorank if data.lexorank else deal.lexorank diff --git a/schemas/deal.py b/schemas/deal.py index c79d253..cc9f3df 100644 --- a/schemas/deal.py +++ b/schemas/deal.py @@ -2,6 +2,8 @@ from datetime import datetime from typing import Optional from schemas.base import BaseSchema, BaseResponse, PaginationInfoSchema +from schemas.board import BoardSchema +from schemas.status import StatusSchema # region Entities @@ -11,8 +13,8 @@ class DealSchema(BaseSchema): id: int name: str lexorank: str - status_id: int - board_id: int + status: StatusSchema + board: BoardSchema created_at: datetime