diff --git a/app/main.py b/app/main.py index 305e7af..a5de7b7 100644 --- a/app/main.py +++ b/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, + }