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
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)
|
|
|