Wichtel Generator – Backend - Backend-Service für eine Wichtel-Generator Web-App. Dieses System stellt sicher, dass über mehrere Runden hinweg keine Wichtel-Paare doppelt vorkommen, solange noch neue Kombinationen mathematisch möglich sind. Das Backend speichert alle Runden und Paarungen persistent in einer SQLite-Datenbank und stellt eine REST-API über FastAPI bereit. ----------------------FEATURES---------------------- - - Wiederholungsfreie Wichtelpaare ------------------------------- Für die gleiche Teilnehmergruppe werden über mehrere Runden hinweg immer neue Paarungen generiert, solange es mathematisch möglich ist. - Mathematische Absicherung ------------------------------- Die maximale Anzahl möglicher eindeutiger Runden wird über Derangements (Subfakultäten) berechnet. - Persistente Speicherung ------------------------------- Alle Runden, Teilnehmer und Paarungen werden in SQLite gespeichert. - REST API (FastAPI) ------------------------------- Optimiert für Integration in eine Web-App. ----------------------Grundidee---------------------- - Wenn dieselbe Gruppe von Personen mehrfach wichtelt, sollen die Paare nicht wiederholt werden. Dazu wird: - Aus allen Teilnehmer-E-Mails ein Konstellations-Hash gebildet - Diese Konstellation erhält einen oder mehrere Cycles - In jedem Cycle werden so lange neue Runden erzeugt, bis alle möglichen Paarungen ausgeschöpft sind - Danach wird automatisch ein neuer Cycle gestartet ----------------------Datenbank-Struktur---------------------- - - ### CYCLES Eine feste Teilnehmer-Konstellation (über Hash) - ### ROUNDS Eine einzelne Wichtelrunde innerhalb eines Cycles - ### PARTICIPANTS Teilnehmer einer bestimmten Runde - ### PAIRS Wer beschenkt wen in einer Runde --- #### Die Datenbank erzwingt: - kein Selbst-Wichteln - kein doppelter Schenker - kein doppelter Empfänger ----------------------API---------------------- - ### Runde erstellen POST /api/rounds - Request { "round_name": "Weihnachten 2025", "participants": [ { "name": "Alice", "email": "alice@mail.com", "wish": "Buch" }, { "name": "Bob", "email": "bob@mail.com" }, { "name": "Clara", "email": "clara@mail.com" } ] } - Response { "round_id": 12, "created_at": "2025-12-01T19:43:10" } --- ### Wichtel aufdecken POST /api/reveal - Request { "email": "alice@mail.com" } - Response { "giver": "Alice", "receiver": "Bob", "wish": "Schokolade" } **Wenn eine E-Mail in mehreren Runden vorkommt, gibt die API zuerst eine Auswahlliste zurück.** ----------------------Roadmap---------------------- - - #### Token-basierte Reveal-Links - #### Mail-Versand - #### Ausschlussregeln (Partner, Familie, etc.) - #### Deployment