fix: add /milestones/{id}/items and update progress endpoint
This commit is contained in:
@@ -158,14 +158,60 @@ def list_milestone_issues(milestone_id: int, db: Session = Depends(get_db)):
|
|||||||
|
|
||||||
@router.get("/milestones/{milestone_id}/progress", tags=["Milestones"])
|
@router.get("/milestones/{milestone_id}/progress", tags=["Milestones"])
|
||||||
def milestone_progress(milestone_id: int, db: Session = Depends(get_db)):
|
def milestone_progress(milestone_id: int, db: Session = Depends(get_db)):
|
||||||
|
from datetime import datetime
|
||||||
ms = db.query(MilestoneModel).filter(MilestoneModel.id == milestone_id).first()
|
ms = db.query(MilestoneModel).filter(MilestoneModel.id == milestone_id).first()
|
||||||
if not ms:
|
if not ms:
|
||||||
raise HTTPException(status_code=404, detail="Milestone not found")
|
raise HTTPException(status_code=404, detail="Milestone not found")
|
||||||
issues = db.query(models.Issue).filter(models.Issue.milestone_id == milestone_id).all()
|
# Count tasks only
|
||||||
|
issues = db.query(models.Issue).filter(
|
||||||
|
models.Issue.milestone_id == milestone_id,
|
||||||
|
models.Issue.issue_type == "task"
|
||||||
|
).all()
|
||||||
total = len(issues)
|
total = len(issues)
|
||||||
done = sum(1 for i in issues if i.status in ("resolved", "closed"))
|
done = sum(1 for i in issues if i.status in ("resolved", "closed"))
|
||||||
return {"milestone_id": milestone_id, "title": ms.title, "total_issues": total,
|
|
||||||
"completed": done, "progress_pct": round(done / total * 100, 1) if total else 0}
|
time_progress = None
|
||||||
|
if ms.planned_release_date and ms.created_at:
|
||||||
|
now = datetime.now()
|
||||||
|
total_duration = (ms.planned_release_date - ms.created_at).total_seconds()
|
||||||
|
elapsed = (now - ms.created_at).total_seconds()
|
||||||
|
time_progress = min(100, max(0, (elapsed / total_duration * 100)))
|
||||||
|
|
||||||
|
return {"milestone_id": milestone_id, "title": ms.title, "total": total,
|
||||||
|
"completed": done, "progress_pct": round(done / total * 100, 1) if total else 0,
|
||||||
|
"time_progress_pct": round(time_progress, 1) if time_progress else None,
|
||||||
|
"planned_release_date": ms.planned_release_date}
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/milestones/{milestone_id}/items", tags=["Milestones"])
|
||||||
|
def milestone_items(milestone_id: int, db: Session = Depends(get_db)):
|
||||||
|
ms = db.query(MilestoneModel).filter(MilestoneModel.id == milestone_id).first()
|
||||||
|
if not ms:
|
||||||
|
raise HTTPException(status_code=404, detail="Milestone not found")
|
||||||
|
|
||||||
|
issues = db.query(models.Issue).filter(models.Issue.milestone_id == milestone_id).all()
|
||||||
|
|
||||||
|
tasks = []
|
||||||
|
supports = []
|
||||||
|
meetings = []
|
||||||
|
|
||||||
|
for issue in issues:
|
||||||
|
issue_data = {
|
||||||
|
"id": issue.id,
|
||||||
|
"title": issue.title,
|
||||||
|
"description": issue.description,
|
||||||
|
"status": issue.status.value if hasattr(issue.status, 'value') else issue.status,
|
||||||
|
"priority": issue.priority.value if hasattr(issue.priority, 'value') else issue.priority,
|
||||||
|
"created_at": issue.created_at,
|
||||||
|
}
|
||||||
|
if issue.issue_type == "task":
|
||||||
|
tasks.append(issue_data)
|
||||||
|
elif issue.issue_type == "support":
|
||||||
|
supports.append(issue_data)
|
||||||
|
elif issue.issue_type == "meeting":
|
||||||
|
meetings.append(issue_data)
|
||||||
|
|
||||||
|
return {"tasks": tasks, "supports": supports, "meetings": meetings}
|
||||||
|
|
||||||
|
|
||||||
# ============ Notifications ============
|
# ============ Notifications ============
|
||||||
|
|||||||
Reference in New Issue
Block a user