update
This commit is contained in:
@@ -7,9 +7,16 @@ from fastapi import APIRouter, HTTPException
|
||||
from fastapi.responses import FileResponse
|
||||
|
||||
from config import FORMAT_META, STORAGE_DIR
|
||||
from database import create_guide, delete_guide, get_guide, list_guides
|
||||
from generator import generate_guide, rework_guide, cancel_guide
|
||||
from models import GuideCreateRequest, GuideReworkRequest, GuideResponse
|
||||
from database import (
|
||||
create_guide, delete_guide, get_guide, list_guides,
|
||||
create_baustein as db_create_baustein, list_bausteine, get_baustein, delete_baustein as db_delete_baustein,
|
||||
list_suggestions, get_suggestion, update_suggestion, delete_suggestion,
|
||||
)
|
||||
from generator import generate_guide, rework_guide, cancel_guide, generate_suggestions, generate_baustein_detail, is_suggestions_generating
|
||||
from models import (
|
||||
GuideCreateRequest, GuideReworkRequest, GuideResponse,
|
||||
BausteinCreateRequest, BausteinResponse, SuggestionResponse,
|
||||
)
|
||||
|
||||
router = APIRouter(prefix="/api")
|
||||
|
||||
@@ -108,3 +115,92 @@ async def remove(guide_id: str):
|
||||
Path(guide["pdf_path"]).unlink(missing_ok=True)
|
||||
await delete_guide(guide_id)
|
||||
return {"ok": True}
|
||||
|
||||
|
||||
# --- Bausteine ---
|
||||
|
||||
@router.get("/bausteine", response_model=list[BausteinResponse])
|
||||
async def get_bausteine(topic: str):
|
||||
return await list_bausteine(topic)
|
||||
|
||||
|
||||
@router.post("/bausteine", response_model=BausteinResponse)
|
||||
async def add_baustein(req: BausteinCreateRequest):
|
||||
now = datetime.now(timezone.utc).isoformat()
|
||||
baustein = {
|
||||
"id": str(uuid.uuid4()),
|
||||
"topic": req.topic.strip(),
|
||||
"title": req.title.strip(),
|
||||
"description": "",
|
||||
"purpose": "",
|
||||
"example": "",
|
||||
"created_at": now,
|
||||
"updated_at": now,
|
||||
}
|
||||
await db_create_baustein(baustein)
|
||||
asyncio.create_task(generate_baustein_detail(baustein["id"], baustein["topic"], baustein["title"]))
|
||||
return baustein
|
||||
|
||||
|
||||
@router.delete("/bausteine/{baustein_id}")
|
||||
async def remove_baustein(baustein_id: str):
|
||||
b = await get_baustein(baustein_id)
|
||||
if b is None:
|
||||
raise HTTPException(404, "Baustein nicht gefunden")
|
||||
await db_delete_baustein(baustein_id)
|
||||
return {"ok": True}
|
||||
|
||||
|
||||
# --- Baustein Suggestions ---
|
||||
|
||||
@router.get("/bausteine/suggestions", response_model=list[SuggestionResponse])
|
||||
async def get_suggestions(topic: str):
|
||||
return await list_suggestions(topic)
|
||||
|
||||
|
||||
@router.post("/bausteine/suggestions/generate")
|
||||
async def trigger_suggestions(topic: str):
|
||||
if is_suggestions_generating(topic):
|
||||
return {"ok": True, "status": "already_generating"}
|
||||
guides = await list_guides()
|
||||
html_paths = []
|
||||
for g in guides:
|
||||
if g["topic"] == topic and g["status"] == "done" and g["html_path"]:
|
||||
html_paths.append(Path(g["html_path"]))
|
||||
asyncio.create_task(generate_suggestions(topic, html_paths))
|
||||
return {"ok": True}
|
||||
|
||||
|
||||
@router.get("/bausteine/suggestions/status")
|
||||
async def suggestions_status(topic: str):
|
||||
return {"generating": is_suggestions_generating(topic)}
|
||||
|
||||
|
||||
@router.post("/bausteine/suggestions/{suggestion_id}/add")
|
||||
async def accept_suggestion(suggestion_id: str):
|
||||
s = await get_suggestion(suggestion_id)
|
||||
if s is None:
|
||||
raise HTTPException(404, "Vorschlag nicht gefunden")
|
||||
now = datetime.now(timezone.utc).isoformat()
|
||||
baustein = {
|
||||
"id": str(uuid.uuid4()),
|
||||
"topic": s["topic"],
|
||||
"title": s["title"],
|
||||
"description": s["description"],
|
||||
"purpose": s["purpose"],
|
||||
"example": s["example"],
|
||||
"created_at": now,
|
||||
"updated_at": now,
|
||||
}
|
||||
await db_create_baustein(baustein)
|
||||
await delete_suggestion(suggestion_id)
|
||||
return baustein
|
||||
|
||||
|
||||
@router.post("/bausteine/suggestions/{suggestion_id}/ignore")
|
||||
async def ignore_suggestion(suggestion_id: str):
|
||||
s = await get_suggestion(suggestion_id)
|
||||
if s is None:
|
||||
raise HTTPException(404, "Vorschlag nicht gefunden")
|
||||
await update_suggestion(suggestion_id, status="ignored")
|
||||
return {"ok": True}
|
||||
|
||||
Reference in New Issue
Block a user