ketannnn's picture
fix(ui): add navbar link to API Docs alongside system reset
5aed951
import uuid
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select
from ..database import get_db
from ..models.jd import JobDescription
from ..schemas.jd import JDCreate, JDResponse, JDListItem
from ..workers.ingest import ingest_jd
router = APIRouter()
@router.post("", response_model=JDResponse, status_code=201)
async def create_jd(payload: JDCreate, db: AsyncSession = Depends(get_db)):
jd = JobDescription(
id=uuid.uuid4(),
title=payload.title,
raw_text=payload.raw_text,
session_id=payload.session_id,
status="processing",
)
db.add(jd)
await db.commit()
await db.refresh(jd)
ingest_jd.delay(str(jd.id), payload.raw_text, payload.title)
return jd
@router.get("", response_model=list[JDListItem])
async def list_jds(session_id: uuid.UUID | None = None, db: AsyncSession = Depends(get_db)):
stmt = select(JobDescription).order_by(JobDescription.created_at.desc())
if session_id:
stmt = stmt.where(JobDescription.session_id == session_id)
result = await db.execute(stmt.limit(50))
return result.scalars().all()
@router.get("/{jd_id}", response_model=JDResponse)
async def get_jd(jd_id: uuid.UUID, db: AsyncSession = Depends(get_db)):
result = await db.execute(select(JobDescription).where(JobDescription.id == jd_id))
jd = result.scalar_one_or_none()
if not jd:
raise HTTPException(status_code=404, detail="JD not found")
return jd
from pydantic import BaseModel
class JDWeightsUpdate(BaseModel):
weights: dict[str, float]
@router.patch("/{jd_id}/weights", response_model=JDResponse)
async def update_jd_weights(jd_id: uuid.UUID, payload: JDWeightsUpdate, db: AsyncSession = Depends(get_db)):
result = await db.execute(select(JobDescription).where(JobDescription.id == jd_id))
jd = result.scalar_one_or_none()
if not jd:
raise HTTPException(status_code=404, detail="JD not found")
jd.custom_weights = payload.weights
await db.commit()
await db.refresh(jd)
return jd