""" routers/index.py — /index and /reindex endpoints. """ from __future__ import annotations import uuid from fastapi import APIRouter, BackgroundTasks, Depends from core.database import get_pool from core.settings import Settings from models.requests import IndexRequest, ReindexRequest from models.responses import JobResponse router = APIRouter(prefix='/index', tags=['indexing']) def _get_settings() -> Settings: from main import app_settings return app_settings async def _enqueue_job(agent_type: str, payload: dict, pool) -> str: job_id = str(uuid.uuid4()) async with pool.acquire() as conn: await conn.execute( """ INSERT INTO agent_jobs (id, agent_type, payload) VALUES ($1::uuid, $2, $3::jsonb) """, job_id, agent_type, __import__('json').dumps(payload), ) return job_id @router.post('', response_model=JobResponse) async def index_file(req: IndexRequest, settings: Settings = Depends(_get_settings)): pool = await get_pool() job_id = await _enqueue_job('ingestion', {'path': req.path, 'force': True}, pool) return JobResponse(job_id=job_id, status='pending', message=f'Indexing {req.path}') @router.post('/reindex', response_model=JobResponse) async def reindex_vault(req: ReindexRequest, settings: Settings = Depends(_get_settings)): pool = await get_pool() job_id = await _enqueue_job('ingestion', {'reindex_all': True, 'force': req.force}, pool) return JobResponse(job_id=job_id, status='pending', message='Full vault reindex queued')