feat: cards, attributes and modules

This commit is contained in:
2025-02-19 14:46:31 +04:00
parent a509a3a586
commit 1af78ce08a
61 changed files with 3212 additions and 2795 deletions

View File

@@ -1,6 +1,7 @@
from datetime import datetime
from sqlalchemy import select, update, func, delete, and_
from sqlalchemy import select, update, func, delete
from sqlalchemy.orm import selectinload
from models import Project, Board
from schemas.project import *
@@ -9,28 +10,37 @@ from services.base import BaseService
class ProjectService(BaseService):
async def get_projects(self) -> GetProjectsResponse:
boards_sub = (
select(Board)
.where(Board.is_deleted == False)
board_count_sub = (
select(
Board.project_id,
func.count(Board.id).label('boards_count'),
)
.group_by(Board.project_id)
.subquery()
)
stmt = (
select(
Project.id,
Project.name,
func.count(boards_sub.c.id)
Project,
func.coalesce(board_count_sub.c.boards_count, 0),
)
.outerjoin(board_count_sub, Project.id == board_count_sub.c.project_id)
.options(
selectinload(Project.attributes),
selectinload(Project.modules),
)
.join(boards_sub, Project.id == boards_sub.c.project_id, isouter=True)
.where(Project.is_deleted == False)
.group_by(Project.id, Project.name)
.order_by(Project.name)
)
project_data = (await self.session.execute(stmt)).all()
projects = []
for project_id, name, boards_count in project_data:
project = ProjectSchemaWithCount(id=project_id, name=name, boards_count=boards_count)
projects.append(project)
for project, boards_count in project_data:
project_schema = FullProjectSchema(
id=project.id,
name=project.name,
boards_count=boards_count,
attributes=project.attributes,
modules=project.modules,
)
projects.append(project_schema)
return GetProjectsResponse(projects=projects)