from __future__ import annotations import os from app.config import settings from fastapi import APIRouter, Depends, HTTPException from api.auth import require_pipeline_guid from database.connection import connect from database.retrain_repository import ( acknowledge_flag, get_database_url, get_pending_flag, resolve_flag ) router = APIRouter(prefix="/retrain", tags=["retraining"]) def _db(): value = settings.DATABASE_URL if not value: raise HTTPException(status_code=500, detail="DATABASE_URL is not configured") return value @router.get("/status") def retrain_status(): with connect(_db()) as conn: pending = get_pending_flag(conn) return {"retrain_required": pending is not None, "flag": pending} @router.post("/flags/{flag_id}/acknowledge", dependencies=[Depends(require_pipeline_guid)]) def acknowledge(flag_id: int, notes: str | None = None): with connect(_db()) as conn: updated = acknowledge_flag(conn, flag_id, notes) if updated is None: raise HTTPException(status_code=404, detail="Pending retrain flag not found") return {"status": "acknowledged", "flag_id": updated} @router.post("/flags/{flag_id}/resolve", dependencies=[Depends(require_pipeline_guid)]) def resolve(flag_id: int, notes: str | None = None): with connect(_db()) as conn: updated = resolve_flag(conn, flag_id, notes) if updated is None: raise HTTPException(status_code=404, detail="Open retrain flag not found") return {"status": "resolved", "flag_id": updated}