Shivam311's picture
feat: CodeAtlas Enterprise - IBM Bob Engineering Intelligence Platform
3a7842d
Raw
History Blame Contribute Delete
1.98 kB
from fastapi import APIRouter, HTTPException
from models.analysis import DocsRequest
from utils.cache import docs_cache, repo_cache
from utils.jobs import create_job, find_active_job, public_job, start_job
from .doc_generator import generate_documentation
router = APIRouter()
@router.post("/generate")
async def generate(request: DocsRequest):
try:
cache_key = f"{request.repo_id}:{request.doc_type}"
if cache_key in docs_cache:
return docs_cache[cache_key]
docs = await generate_documentation(request.repo_id, request.doc_type)
docs_cache[cache_key] = docs
return docs
except Exception as exc:
raise HTTPException(status_code=500, detail=str(exc)) from exc
@router.post("/generate/start")
async def start_generate(request: DocsRequest):
if request.repo_id not in repo_cache:
raise HTTPException(status_code=404, detail="Repository not loaded")
cache_key = f"{request.repo_id}:{request.doc_type}"
if cache_key in docs_cache:
return {
"job_id": None,
"status": "completed",
"message": "Documentation already completed",
"result": docs_cache[cache_key],
}
payload = {"doc_type": request.doc_type}
existing = find_active_job("documentation", request.repo_id, payload)
if existing:
return public_job(existing)
job = create_job("documentation", request.repo_id, payload)
async def run():
docs = await generate_documentation(request.repo_id, request.doc_type)
docs_cache[cache_key] = docs
return docs
start_job(job, run)
return public_job(job)
@router.get("/generate/jobs/{job_id}")
async def get_docs_job(job_id: str):
from utils.cache import job_cache
job = job_cache.get(job_id)
if not job or job.get("kind") != "documentation":
raise HTTPException(status_code=404, detail="Documentation job not found")
return public_job(job)