45 lines
1.6 KiB
Python
45 lines
1.6 KiB
Python
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)
|