tts-voice-creator-clone-and.../routes/rehearsals_db.py
2026-06-30 13:53:08 +02:00

76 lines
2.2 KiB
Python

"""Rehearsal library REST API — backed by SQLite via core.database.
Mirrors the IndexedDB API in rehearser.js:
GET /api/rehearsals → { rehearsals: [...] }
GET /api/rehearsals/{id} → record | 404
PUT /api/rehearsals/{id} → full replace (id must exist)
POST /api/rehearsals → insert (no id), returns { id }
DELETE /api/rehearsals/{id}{ ok: true }
POST /api/rehearsals/migrate → bulk import from JS IndexedDB dump
"""
from __future__ import annotations
from fastapi import APIRouter, HTTPException, Request
from core.database import reh_get_all, reh_get, reh_put, reh_delete
router = APIRouter()
@router.get("/api/rehearsals")
async def rehearsals_list():
return {"rehearsals": reh_get_all()}
@router.get("/api/rehearsals/{reh_id:int}")
async def rehearsals_get(reh_id: int):
rec = reh_get(reh_id)
if rec is None:
raise HTTPException(404, "Rehearsal not found")
return rec
@router.post("/api/rehearsals")
async def rehearsals_add(request: Request):
try:
body = await request.json()
except Exception:
raise HTTPException(400, "Invalid JSON")
body.pop("id", None)
saved = reh_put(body)
return {"id": saved["id"]}
@router.put("/api/rehearsals/{reh_id:int}")
async def rehearsals_put(reh_id: int, request: Request):
if reh_get(reh_id) is None:
raise HTTPException(404, "Rehearsal not found")
try:
body = await request.json()
except Exception:
raise HTTPException(400, "Invalid JSON")
body["id"] = reh_id
reh_put(body)
return {"ok": True}
@router.delete("/api/rehearsals/{reh_id:int}")
async def rehearsals_delete(reh_id: int):
reh_delete(reh_id)
return {"ok": True}
@router.post("/api/rehearsals/migrate")
async def rehearsals_migrate(request: Request):
"""Accept a batch of rehearsal records from the browser's IndexedDB dump."""
try:
body = await request.json()
except Exception:
raise HTTPException(400, "Invalid JSON")
records = body if isinstance(body, list) else body.get("rehearsals", [])
ids = []
for rec in records:
saved = reh_put(rec)
ids.append(saved["id"])
return {"imported": len(ids), "ids": ids}