diff --git a/axon/routers/jobs.py b/axon/routers/jobs.py new file mode 100644 index 0000000..ed47bdc --- /dev/null +++ b/axon/routers/jobs.py @@ -0,0 +1,47 @@ +from fastapi import APIRouter, HTTPException + +from axon.models import ( + CrawlRequest, + JobCreateResponse, + JobResponse, + MapRequest, + ResearchRequest, +) +from axon.routers.crawl import crawl +from axon.routers.map import map_site +from axon.routers.research import research +from axon.services.jobs import create_job, get_job + +router = APIRouter() + + +@router.post("/research/jobs", response_model=JobCreateResponse) +async def create_research_job(request: ResearchRequest) -> JobCreateResponse: + job = create_job("research", lambda: research(request)) + return JobCreateResponse(job_id=job.job_id, status=job.status) + + +@router.post("/crawl/jobs", response_model=JobCreateResponse) +async def create_crawl_job(request: CrawlRequest) -> JobCreateResponse: + job = create_job("crawl", lambda: crawl(request)) + return JobCreateResponse(job_id=job.job_id, status=job.status) + + +@router.post("/map/jobs", response_model=JobCreateResponse) +async def create_map_job(request: MapRequest) -> JobCreateResponse: + job = create_job("map", lambda: map_site(request)) + return JobCreateResponse(job_id=job.job_id, status=job.status) + + +@router.get("/jobs/{job_id}", response_model=JobResponse) +async def read_job(job_id: str) -> JobResponse: + job = get_job(job_id) + if job is None: + raise HTTPException(status_code=404, detail="Job not found") + return JobResponse( + job_id=job.job_id, + kind=job.kind, + status=job.status, + result=job.result, + error=job.error, + )