feat: deal's status and board update

This commit is contained in:
2025-09-02 14:42:11 +04:00
parent de5ffed7de
commit 404a58735d
3 changed files with 19 additions and 6 deletions

View File

@ -21,7 +21,7 @@ class Deal(BaseModel, IdMixin, SoftDeleteMixin, CreatedAtMixin):
nullable=False,
comment="Текущий статус",
)
status: Mapped["Status"] = relationship(lazy="noload")
status: Mapped["Status"] = relationship()
board_id: Mapped[int] = mapped_column(
ForeignKey("boards.id"), nullable=True, server_default="1"

View File

@ -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,11 +67,12 @@ class DealRepository(BaseRepository):
self.session.add(deal)
await self.session.commit()
await self.session.refresh(deal)
return deal
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
deal.name = data.name if data.name else deal.name
deal.board_id = data.board_id if data.board_id else deal.board_id
if data.status_id and deal.status_id != data.status_id:
deal.status_history.append(

View File

@ -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
@ -26,6 +28,7 @@ class CreateDealSchema(BaseSchema):
class UpdateDealSchema(BaseSchema):
name: Optional[str] = None
lexorank: Optional[str] = None
board_id: Optional[int] = None
status_id: Optional[int] = None