Files
Crm-Backend/repositories/board.py

38 lines
1.2 KiB
Python

from sqlalchemy import select, Select
from sqlalchemy.orm import selectinload
from models import Board
from repositories.base import BaseRepository
from repositories.mixins import RepDeleteMixin, RepCreateMixin, GetByIdMixin
from schemas.board import UpdateBoardSchema, CreateBoardSchema
class BoardRepository(
BaseRepository,
RepDeleteMixin[Board],
RepCreateMixin[Board, CreateBoardSchema],
GetByIdMixin[Board],
):
entity_class = Board
async def get_all(self, project_id: int) -> list[Board]:
stmt = (
select(Board)
.where(Board.is_deleted.is_(False), Board.project_id == project_id)
.order_by(Board.lexorank)
)
result = await self.session.execute(stmt)
return list(result.scalars().all())
def _process_get_by_id_stmt(self, stmt: Select) -> Select:
return stmt.options(selectinload(Board.deals))
async def update(self, board: Board, data: UpdateBoardSchema) -> Board:
board.lexorank = data.lexorank if data.lexorank else board.lexorank
board.name = data.name if data.name else board.name
self.session.add(board)
await self.session.commit()
await self.session.refresh(board)
return board