from __future__ import annotations from fastapi import APIRouter, Depends from app.api.dependencies import get_job_service, get_repair_service from app.schemas.job import JobDetailResponse, JobListResponse, JobMutationResponse, JobRunPendingResponse, JobSummary from app.services.job_service import JobService from app.services.repair_service import RepairService from app.schemas.repair import EnqueueHealthChecksResponse router = APIRouter() @router.get("", response_model=JobListResponse) async def list_jobs(service: JobService = Depends(get_job_service)) -> JobListResponse: items = await service.list_jobs() return JobListResponse(items=[JobSummary.model_validate(item, from_attributes=True) for item in items]) @router.get("/{job_id}", response_model=JobDetailResponse) async def get_job(job_id: str, service: JobService = Depends(get_job_service)) -> JobDetailResponse: job = await service.get_job(job_id) return JobDetailResponse(job=JobSummary.model_validate(job, from_attributes=True)) @router.post("/{job_id}/retry", response_model=JobMutationResponse) async def retry_job(job_id: str, service: JobService = Depends(get_job_service)) -> JobMutationResponse: job = await service.retry_job(job_id) return JobMutationResponse(job=JobSummary.model_validate(job, from_attributes=True)) @router.post("/run-pending", response_model=JobRunPendingResponse) async def run_pending_jobs(service: JobService = Depends(get_job_service)) -> JobRunPendingResponse: result = await service.run_pending_jobs() return JobRunPendingResponse(processed=result.processed, completed=result.completed, failed=result.failed) @router.post("/enqueue-health-checks", response_model=EnqueueHealthChecksResponse) async def enqueue_health_checks( service: RepairService = Depends(get_repair_service), ) -> EnqueueHealthChecksResponse: enqueued = await service.enqueue_backend_health_checks() return EnqueueHealthChecksResponse(enqueued_jobs=enqueued) @router.post("/enqueue-full-reconcile", response_model=EnqueueHealthChecksResponse) async def enqueue_full_reconcile( service: RepairService = Depends(get_repair_service), ) -> EnqueueHealthChecksResponse: enqueued = await service.enqueue_full_reconcile() return EnqueueHealthChecksResponse(enqueued_jobs=enqueued)