This commit is contained in:
team3
2026-09-17 12:14:40 +02:00
parent b42cf64782
commit a1684cf54f
11 changed files with 181 additions and 29 deletions

View File

@@ -250,6 +250,25 @@ def sitzung(response: Response, sid):
return neu
def mitglied(sid):
"""Wer keinen Namen gewählt hat, darf zusehen, aber nichts eintragen.
Vorschläge, Sammlungen, Wertungen und Wünsche gehören einer Person.
Ohne Namen hingen sie nur am Cookie: im geteilten Browser schriebe
jeder auf dasselbe Konto, und nach dem Löschen der Cookies wäre alles
weg. Die Knöpfe blendet die Oberfläche aus — das hier ist der Riegel.
Der Host braucht dafür ebenfalls einen Namen. Seine eigenen Knöpfe
(drehen, eintragen, aufräumen) laufen über andere Routen.
"""
ich = users.besitzer(sid)
if ich is None:
raise HTTPException(
status_code=403, detail="Dafür musst du oben deinen Namen wählen."
)
return ich
# Der letzte Dreh, damit eine Seite mitten in der Animation nachziehen kann
letzter_dreh = {"ergebnis": None, "start": 0.0}
@@ -324,6 +343,7 @@ async def vorschlagen(
filmabend_sid: str | None = Cookie(None),
):
sid = sitzung(response, filmabend_sid)
mitglied(sid)
movie = await film_holen(movie_id)
# Ein zweiter Vorschlag ersetzt den ersten, statt abgelehnt zu werden
eintrag = suggestions.ersetzen(sid, movie, users.name_von(sid))
@@ -336,6 +356,7 @@ async def vorschlagen(
@app.delete("/api/suggestions")
def vorschlag_loeschen(response: Response, filmabend_sid: str | None = Cookie(None)):
sid = sitzung(response, filmabend_sid)
mitglied(sid)
entfernt = suggestions.loeschen(sid)
if entfernt:
events.senden("suggestions")
@@ -366,6 +387,7 @@ def wunsch_anlegen(
filmabend_sid: str | None = Cookie(None),
):
sid = sitzung(response, filmabend_sid)
mitglied(sid)
liste = features.anlegen(sid, text)
if liste is None:
raise HTTPException(status_code=400, detail="Kein Text")
@@ -397,6 +419,7 @@ def wunsch_abstimmen(
):
"""Ein Klick setzt die Stimme, der nächste nimmt sie zurück."""
sid = sitzung(response, filmabend_sid)
mitglied(sid)
steht = features.abstimmen(feature_id, sid)
if steht is None:
raise HTTPException(status_code=404, detail="Wunsch nicht gefunden")
@@ -421,6 +444,7 @@ def wunsch_anmerken(
filmabend_sid: str | None = Cookie(None),
):
sid = sitzung(response, filmabend_sid)
mitglied(sid)
if not features.anmerken(feature_id, sid, text):
raise HTTPException(status_code=400, detail="Kein Text oder Wunsch unbekannt")
events.senden("features")
@@ -451,6 +475,7 @@ async def merken(
filmabend_sid: str | None = Cookie(None),
):
sid = sitzung(response, filmabend_sid)
mitglied(sid)
return wishlist.merken(sid, await film_holen(movie_id))
@@ -461,6 +486,7 @@ def vergessen(
filmabend_sid: str | None = Cookie(None),
):
sid = sitzung(response, filmabend_sid)
mitglied(sid)
return {"removed": wishlist.vergessen(sid, movie_id)}
@@ -554,6 +580,7 @@ def bewerten(
filmabend_sid: str | None = Cookie(None),
):
sid = sitzung(response, filmabend_sid)
mitglied(sid)
stars = max(1, min(watched.MAX_STERNE, stars))
# Der Name kommt aus der Runde, nicht aus der Anfrage
eintrag = watched.bewerten(watched_id, sid, stars, users.name_von(sid), text)