diff --git a/backend/app/suggestions.py b/backend/app/suggestions.py index 124de96..042c349 100644 --- a/backend/app/suggestions.py +++ b/backend/app/suggestions.py @@ -122,7 +122,14 @@ def ziehen(): if not eintraege: return None - treffer = random.randrange(len(eintraege)) + # Schon gelaufene Filme überspringen. Sind alle Vorschläge gesehen, + # bleibt es bei der vollen Auswahl — sonst gäbe es keinen Gewinner. + with connect() as conn: + gesehen = { + r["movie_id"] for r in conn.execute("SELECT movie_id FROM watched") + } + frisch = [i for i, e in enumerate(eintraege) if e["movie_id"] not in gesehen] + treffer = random.choice(frisch) if frisch else random.randrange(len(eintraege)) schritt = 360 / len(eintraege) runden = 5 + random.randrange(3) # Der Zeiger steht oben, also muss die Mitte des Zielsegments dorthin diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 5d955ef..1292667 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -331,6 +331,11 @@ async function ladeGesehen() { } } +// Für die Karten: nur die Kennungen, als Menge zum schnellen Nachschlagen +const gesehenIds = computed( + () => new Set(gesehen.value.map((e) => e.movie_id)) +) + // Ausgeblendete Filme zählen für Gäste nicht mit const gesehenZahl = computed( () => gesehen.value.filter((e) => host.value || !e.hidden).length @@ -659,12 +664,14 @@ onUnmounted(() => {