show completion in frontend

This commit is contained in:
2026-07-15 11:18:38 -04:00
parent 425d418426
commit b3116f60e2
11 changed files with 265 additions and 39 deletions
+24 -3
View File
@@ -452,21 +452,42 @@ def get_holidays() -> dict[str, Any]:
return {"dates": sorted(db.list_holidays(DB_PATH))}
@app.get("/api/schedule/versions")
def get_schedule_versions() -> dict[str, Any]:
return {"versions": db.get_schedule_versions(DB_PATH)}
@app.get("/api/schedule/week")
def get_schedule_week(start: str | None = None) -> dict[str, Any]:
def get_schedule_week(start: str | None = None, version: int | None = None) -> dict[str, Any]:
week_start = start or date.today().isoformat()
try:
datetime.strptime(week_start, "%Y-%m-%d")
except ValueError as exc:
raise HTTPException(status_code=400, detail="start must be YYYY-MM-DD") from exc
if version is not None and version <= 0:
raise HTTPException(status_code=400, detail="version must be a positive integer")
week_start_date = datetime.strptime(week_start, "%Y-%m-%d").date()
rows = db.get_schedule_week(week_start, DB_PATH)
all_rows = db.get_schedule_rows_for_latest_version(DB_PATH)
selected_version = db.resolve_schedule_version(version, DB_PATH)
if version is not None and selected_version is None:
raise HTTPException(status_code=404, detail=f"Schedule version {version} was not found")
rows = db.get_schedule_week(week_start, selected_version, DB_PATH)
# Log completed tests on the current schedule
completed_count = sum(1 for row in rows if row.status == 'completed')
if completed_count > 0:
print(f"[api] /schedule/week: {completed_count} test(s) marked as completed on calendar")
for row in rows:
if row.status == 'completed':
print(f" - {row.test_id} on {row.device} (scheduled {row.scheduled_date})")
all_rows = db.get_schedule_rows(selected_version, DB_PATH)
completion_date = max((row.scheduled_date for row in all_rows), default=None)
holiday_dates = db.list_holidays(DB_PATH)
return {
"start_date": week_start,
"schedule_version": selected_version,
"items": [_serialize_schedule_row(row) for row in rows],
"total_scheduled_tests": len(all_rows),
"completion_date": completion_date,