from __future__ import annotations from .shared import * from .helpers import _build_project_summary, _get_visible_project_or_404, _serialize_project_row, _visible_project_filter @router.get("/") async def list_projects( summary: Optional[int] = Query(default=0), status: Optional[str] = Query(default=None), assigned_role: Optional[str] = Query(default=None), current_user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): tenant_id = int(current_user.tenant_id) query = select(Project).where(Project.tenant_id == tenant_id) query = query.where(_visible_project_filter(current_user=current_user)) if status: query = query.where(Project.status == status) if assigned_role: query = query.where(Project.assigned_role == assigned_role) query = query.order_by(Project.updated_at.desc(), Project.id.desc()) projects = (await db.execute(query)).scalars().all() if int(summary or 0) == 1: rows = [ await _build_project_summary( db, tenant_id=tenant_id, project=project, ) for project in projects ] return {"projects": rows} return [_serialize_project_row(project) for project in projects] @router.get("/{project_id}") async def get_project( project_id: int, current_user: User = Depends(get_current_user), db: AsyncSession = Depends(get_db), ): project = await _get_visible_project_or_404(db, current_user=current_user, project_id=project_id) return _serialize_project_row(project)