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