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