feat: cards, attributes and modules

This commit is contained in:
2025-02-19 14:46:31 +04:00
parent a509a3a586
commit 1af78ce08a
61 changed files with 3212 additions and 2795 deletions

View File

@@ -2,30 +2,30 @@ from typing import Optional
from sqlalchemy import select, and_, func
from models import DealStatus, Deal
from models import CardStatus, Card
from schemas.status import *
from services.base import BaseService
class StatusService(BaseService):
async def _get_statuses_for_board(self, board_id: int) -> list[DealStatus]:
async def _get_statuses_for_board(self, board_id: int) -> list[CardStatus]:
stmt = (
select(DealStatus)
select(CardStatus)
.where(
and_(
DealStatus.board_id == board_id,
DealStatus.is_deleted == False,
CardStatus.board_id == board_id,
CardStatus.is_deleted == False,
)
)
.order_by(DealStatus.ordinal_number)
.order_by(CardStatus.ordinal_number)
)
statuses = (await self.session.scalars(stmt)).all()
return list(statuses)
async def _get_status_by_id(self, status_id: int) -> Optional[DealStatus]:
async def _get_status_by_id(self, status_id: int) -> Optional[CardStatus]:
stmt = (
select(DealStatus)
.where(DealStatus.id == status_id)
select(CardStatus)
.where(CardStatus.id == status_id)
)
status = await self.session.scalar(stmt)
return status
@@ -38,7 +38,7 @@ class StatusService(BaseService):
statuses[-1].is_finishing = False
ordinal_number = statuses[-1].ordinal_number + 1
status = DealStatus(
status = CardStatus(
**request.status.model_dump(),
ordinal_number=ordinal_number,
is_finishing=True,
@@ -81,12 +81,12 @@ class StatusService(BaseService):
async def _count_deals_in_progress(self, status_id: int) -> int:
stmt = (
select(func.count(Deal.id))
select(func.count(Card.id))
.where(
and_(
Deal.current_status_id == status_id,
Deal.is_deleted == False,
Deal.is_completed == False,
Card.current_status_id == status_id,
Card.is_deleted == False,
Card.is_completed == False,
)
)
)
@@ -94,12 +94,12 @@ class StatusService(BaseService):
async def _count_deals(self, status_id: int) -> int:
stmt = (
select(func.count(Deal.id))
.where(Deal.current_status_id == status_id)
select(func.count(Card.id))
.where(Card.current_status_id == status_id)
)
return (await self.session.scalars(stmt)).first()
async def _set_finishing_flag_to_prev_status(self, status: DealStatus):
async def _set_finishing_flag_to_prev_status(self, status: CardStatus):
statuses = await self._get_statuses_for_board(status.board_id)
if len(statuses) < 2:
return