feat: projects create, update, delete

This commit is contained in:
2025-08-13 15:01:22 +04:00
parent 71c0901909
commit 5e20da8356
4 changed files with 156 additions and 7 deletions

View File

@ -1,7 +1,12 @@
from datetime import datetime
from typing import Optional
from sqlalchemy import select
from sqlalchemy.orm import selectinload
from models.project import Project
from repositories.base import BaseRepository
from schemas.project import CreateProjectSchema, UpdateProjectSchema
class ProjectRepository(BaseRepository):
@ -9,3 +14,39 @@ class ProjectRepository(BaseRepository):
stmt = select(Project).where(Project.is_deleted.is_(False))
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 create(self, data: CreateProjectSchema) -> Project:
project_data = data.model_dump()
project_data["created_at"] = datetime.now()
project = Project(**project_data)
self.session.add(project)
await self.session.commit()
await self.session.refresh(project)
return project
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
async def delete(self, project: Project, is_soft: bool):
if not is_soft:
await self.session.delete(project)
await self.session.commit()
return
project.is_deleted = True
self.session.add(project)
await self.session.commit()