wichtel_generator/README.md
2026-01-09 17:23:08 +01:00

134 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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