feat: dashboard stats API (by status/type/priority)
This commit is contained in:
31
app/main.py
31
app/main.py
@@ -459,3 +459,34 @@ def search_issues(
|
||||
if project_id:
|
||||
query = query.filter(models.Issue.project_id == project_id)
|
||||
return query.offset(skip).limit(limit).all()
|
||||
|
||||
|
||||
|
||||
# ============ Dashboard / Stats API ============
|
||||
|
||||
@app.get("/dashboard/stats")
|
||||
def dashboard_stats(project_id: int = None, db: Session = Depends(get_db)):
|
||||
"""Get issue statistics for dashboard."""
|
||||
query = db.query(models.Issue)
|
||||
if project_id:
|
||||
query = query.filter(models.Issue.project_id == project_id)
|
||||
|
||||
total = query.count()
|
||||
by_status = {}
|
||||
for s in ["open", "in_progress", "resolved", "closed", "blocked"]:
|
||||
by_status[s] = query.filter(models.Issue.status == s).count()
|
||||
|
||||
by_type = {}
|
||||
for t in ["task", "story", "test", "resolution"]:
|
||||
by_type[t] = query.filter(models.Issue.issue_type == t).count()
|
||||
|
||||
by_priority = {}
|
||||
for p in ["low", "medium", "high", "critical"]:
|
||||
by_priority[p] = query.filter(models.Issue.priority == p).count()
|
||||
|
||||
return {
|
||||
"total": total,
|
||||
"by_status": by_status,
|
||||
"by_type": by_type,
|
||||
"by_priority": by_priority,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user