update
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import json
|
||||
import logging
|
||||
from contextlib import asynccontextmanager
|
||||
|
||||
@@ -27,6 +28,11 @@ class ThemaNeu(BaseModel):
|
||||
hinweise: str = ""
|
||||
|
||||
|
||||
class Position(BaseModel):
|
||||
abschnitt: str | None = None
|
||||
lesemodus: int | None = None
|
||||
|
||||
|
||||
def _pruefen(name: str) -> dict:
|
||||
if not state.name_ok(name) or not (t := state.thema(name)):
|
||||
raise HTTPException(404, "Thema unbekannt")
|
||||
@@ -94,6 +100,18 @@ async def zustand(name: str):
|
||||
"deutung": st.get("deutung") or state.deutung(name), "ereignisse": st["ereignisse"][-100:]}
|
||||
|
||||
|
||||
@app.get("/api/topics/{name}/position")
|
||||
async def position_lesen(name: str):
|
||||
_pruefen(name)
|
||||
return state.position(name)
|
||||
|
||||
|
||||
@app.put("/api/topics/{name}/position")
|
||||
async def position_schreiben(name: str, body: Position):
|
||||
_pruefen(name)
|
||||
return state.position_setzen(name, {k: v for k, v in body.model_dump().items() if v is not None})
|
||||
|
||||
|
||||
@app.get("/api/topics/{name}/guide")
|
||||
async def guide(name: str):
|
||||
_pruefen(name)
|
||||
|
||||
@@ -167,3 +167,15 @@ def slug(text: str) -> str:
|
||||
t = t.replace(a, b)
|
||||
t = re.sub(r"[^a-z0-9]+", "-", t).strip("-")
|
||||
return t[:60] or "kapitel"
|
||||
|
||||
|
||||
def position(name: str) -> dict:
|
||||
"""Leseposition (Abschnitt der Buchansicht, Bildschirm des Lesemodus) – geräteübergreifend auf dem Server."""
|
||||
return _lesen(verzeichnis(name) / "position.json", {})
|
||||
|
||||
|
||||
def position_setzen(name: str, werte: dict) -> dict:
|
||||
p = position(name)
|
||||
p.update(werte)
|
||||
_schreiben(verzeichnis(name) / "position.json", p)
|
||||
return p
|
||||
|
||||
Reference in New Issue
Block a user