""" Jobs-Router: Status einzelner Hintergrund-Jobs + Liste der letzten Jobs. Liefert die Daten fuer das Aktivitaets-Panel mit Live-Log. """ from fastapi import APIRouter, Depends, HTTPException from auth import auth from jobengine import JOBS, cancel_job, clear_finished, delete_job router = APIRouter(prefix="/api", dependencies=[Depends(auth)]) @router.get("/jobs/{job_id}") def job_status(job_id: str): job = JOBS.get(job_id) if not job: raise HTTPException(404, "Job nicht gefunden.") return job @router.post("/jobs/{job_id}/cancel") def job_cancel(job_id: str): if not cancel_job(job_id): raise HTTPException(409, "Job laeuft nicht (mehr) oder ist unbekannt.") return {"ok": True} @router.post("/jobs/clear") def jobs_clear(): """Alle abgeschlossenen Jobs aus dem Verlauf entfernen (laufende bleiben).""" return {"ok": True, "removed": clear_finished()} @router.delete("/jobs/{job_id}") def job_delete(job_id: str): if not delete_job(job_id): raise HTTPException(409, "Job laeuft noch oder ist unbekannt — laufende erst abbrechen.") return {"ok": True} @router.get("/jobs") def jobs_list(): return sorted(JOBS.values(), key=lambda j: j["started_at"], reverse=True)[:20]