from sqlalchemy import select, Select from sqlalchemy.orm import selectinload from models.project import Project from repositories.base import BaseRepository from repositories.mixins import RepDeleteMixin, RepCreateMixin, GetByIdMixin from schemas.project import CreateProjectSchema, UpdateProjectSchema class ProjectRepository( BaseRepository, RepDeleteMixin[Project], RepCreateMixin[Project, CreateProjectSchema], GetByIdMixin[Project], ): entity_class = Project async def get_all(self) -> list[Project]: stmt = select(Project).where(Project.is_deleted.is_(False)).order_by(Project.id) 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(Project.boards)) async def update(self, project: Project, data: UpdateProjectSchema) -> Project: project.name = data.name if data.name else project.name self.session.add(project) await self.session.commit() await self.session.refresh(project) return project