feat: cards, attributes and modules
This commit is contained in:
		@@ -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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user