from app.models.enums import NoteStatus from app.utils.time import now_ts from fastapi import APIRouter, BackgroundTasks, HTTPException from pydantic import BaseModel from typing import List from app.services.note_store import get_note, update_note from app.jobs.async_enrichment_job import enrich_note router = APIRouter(prefix="/notes", tags=["notes"]) class RegenerateRequest(BaseModel): generate: List[str] @router.post("/{note_id}/regenerate") def regenerate_note(note_id: str, req: RegenerateRequest, bg: BackgroundTasks): note = get_note(note_id) if not note: raise HTTPException(404, "Note not found") allowed = {"normalize", "keywords", "summary", "mindmap"} if not set(req.generate).issubset(allowed): raise HTTPException(400, "Invalid generate task, generate list must not be empty") # mark processing immediately update_note(note_id, { "status": NoteStatus.processing, "normalized_text": None, "title": None, "keywords": None, "summary": None, "mindmap": None, "updated_at": now_ts(), }) bg.add_task(enrich_note, note_id, req.generate) return { "note_id": note_id, "status": NoteStatus.processing, }