feat: add general /supports list endpoint with status/taken_by filters

- New GET /supports endpoint for listing all support tickets across projects
- Supports optional ?status= and ?taken_by= (me|null|username) query params
- Ordered by created_at descending
- Complements the existing scoped /supports/{project_code}/{milestone_id} endpoint
This commit is contained in:
zhi
2026-03-22 00:17:44 +00:00
parent b351075561
commit d17072881b

View File

@@ -524,6 +524,35 @@ def _serialize_support(db: Session, support: Support) -> dict:
} }
@router.get("/supports", tags=["Supports"])
def list_all_supports(
status: str | None = None,
taken_by: str | None = None,
db: Session = Depends(get_db),
current_user: models.User = Depends(get_current_user_or_apikey),
):
"""List support tickets across all projects. Optional status/taken_by filters."""
query = db.query(Support)
if status:
query = query.filter(Support.status == SupportStatus(status))
if taken_by == "me":
query = query.filter(Support.assignee_id == current_user.id)
elif taken_by == "null":
query = query.filter(Support.assignee_id.is_(None))
elif taken_by:
assignee = db.query(models.User).filter(models.User.username == taken_by).first()
if assignee:
query = query.filter(Support.assignee_id == assignee.id)
else:
return []
query = query.order_by(Support.created_at.desc())
supports = query.all()
return [_serialize_support(db, s) for s in supports]
@router.get("/supports/{project_code}/{milestone_id}", tags=["Supports"]) @router.get("/supports/{project_code}/{milestone_id}", tags=["Supports"])
def list_supports(project_code: str, milestone_id: int, db: Session = Depends(get_db)): def list_supports(project_code: str, milestone_id: int, db: Session = Depends(get_db)):
project = db.query(models.Project).filter(models.Project.project_code == project_code).first() project = db.query(models.Project).filter(models.Project.project_code == project_code).first()