Files
Crm-Backend/repositories/project.py

40 lines
1.3 KiB
Python

from typing import Optional
from sqlalchemy import select
from sqlalchemy.orm import selectinload
from models.project import Project
from repositories.base import BaseRepository
from repositories.mixins import RepDeleteMixin, RepCreateMixin
from schemas.project import CreateProjectSchema, UpdateProjectSchema
class ProjectRepository(
BaseRepository,
RepDeleteMixin[Project],
RepCreateMixin[Project, CreateProjectSchema],
):
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())
async def get_by_id(self, project_id: int) -> Optional[Project]:
stmt = (
select(Project)
.where(Project.id == project_id, Project.is_deleted.is_(False))
.options(selectinload(Project.boards))
)
result = await self.session.execute(stmt)
return result.scalar_one_or_none()
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