Files
Crm-Backend/repositories/status.py

39 lines
1.3 KiB
Python

from sqlalchemy import select, func
from models import Status, Deal
from repositories.base import BaseRepository
from repositories.mixins import RepDeleteMixin, RepCreateMixin, GetByIdMixin
from schemas.status import UpdateStatusSchema, CreateStatusSchema
class StatusRepository(
BaseRepository,
RepDeleteMixin[Status],
RepCreateMixin[Status, CreateStatusSchema],
GetByIdMixin[Status],
):
entity_class = Status
async def get_all(self, board_id: int) -> list[Status]:
stmt = (
select(Status)
.where(Status.is_deleted.is_(False), Status.board_id == board_id)
.order_by(Status.lexorank)
)
result = await self.session.execute(stmt)
return list(result.scalars().all())
async def get_deals_count(self, status_id: int) -> int:
stmt = select(func.count(Deal.id)).where(Deal.status_id == status_id)
result = await self.session.execute(stmt)
return result.scalar()
async def update(self, status: Status, data: UpdateStatusSchema) -> Status:
status.lexorank = data.lexorank if data.lexorank else status.lexorank
status.name = data.name if data.name else status.name
self.session.add(status)
await self.session.commit()
await self.session.refresh(status)
return status