This commit is contained in:
Mikan
2026-06-21 09:24:42 +03:00
parent 7cbe8da103
commit c45ab1ddd5
24 changed files with 1438 additions and 148 deletions

View File

@@ -292,6 +292,78 @@ async def stats(
}
# --------------------------------------------------------------------------- #
# Name bank — get/update character name banks per language
# --------------------------------------------------------------------------- #
@router.get("/names/{language}")
async def get_name_bank(
language: str,
db: AsyncSession = Depends(get_db),
_user: User = Depends(require_admin),
) -> dict:
"""Get the character name bank for a language."""
names = await get_setting(db, f"character_names.{language}")
if not isinstance(names, list):
names = []
return {"language": language, "names": names, "count": len(names)}
@router.put("/names/{language}")
async def update_name_bank(
language: str,
body: dict,
db: AsyncSession = Depends(get_db),
_user: User = Depends(require_admin),
) -> dict:
"""Update the character name bank for a language.
Body: {names: ["name1", "name2", ...]}
"""
names = body.get("names", [])
if not isinstance(names, list):
raise HTTPException(400, "names must be an array")
# Validate all entries are strings
cleaned = [str(n).strip() for n in names if str(n).strip()]
await set_setting(db, f"character_names.{language}", cleaned)
return {"language": language, "names": cleaned, "count": len(cleaned)}
@router.post("/names/{language}/add")
async def add_name_to_bank(
language: str,
body: dict,
db: AsyncSession = Depends(get_db),
_user: User = Depends(require_admin),
) -> dict:
"""Add a single name to the bank. Body: {name: "..."}"""
name = body.get("name", "").strip()
if not name:
raise HTTPException(400, "name is required")
names = await get_setting(db, f"character_names.{language}")
if not isinstance(names, list):
names = []
if name not in names:
names.append(name)
await set_setting(db, f"character_names.{language}", names)
return {"language": language, "names": names, "count": len(names)}
@router.delete("/names/{language}/{name}")
async def remove_name_from_bank(
language: str,
name: str,
db: AsyncSession = Depends(get_db),
_user: User = Depends(require_admin),
) -> dict:
"""Remove a name from the bank."""
names = await get_setting(db, f"character_names.{language}")
if not isinstance(names, list):
names = []
names = [n for n in names if n != name]
await set_setting(db, f"character_names.{language}", names)
return {"language": language, "names": names, "count": len(names)}
# --------------------------------------------------------------------------- #
# LLM model list — fetch available models from the LLM provider
# --------------------------------------------------------------------------- #