PMFlow/backend/app/api/projects_api/routes_list.py

44 lines
1.4 KiB
Python

from __future__ import annotations
from .shared import *
from .helpers import _build_project_summary, _get_project_or_404
@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),
tenant_id: int = Depends(get_tenant_id),
db: AsyncSession = Depends(get_db),
):
query = select(Project).where(Project.tenant_id == tenant_id)
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,
tenant_id: int = Depends(get_tenant_id),
db: AsyncSession = Depends(get_db),
):
project = await _get_project_or_404(db, tenant_id=tenant_id, project_id=project_id)
return _serialize_project_row(project)