You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

51 lines
2.3 KiB

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)