2026-01-09 17:23:08 +01:00
2026-01-09 16:53:37 +01:00
2026-01-09 16:53:37 +01:00
2026-01-09 16:53:37 +01:00
2026-01-09 17:23:08 +01:00
2026-01-09 17:00:00 +01:00
2026-01-09 16:53:37 +01:00

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----------------------

  • Mail-Versand

  • Ausschlussregeln (Partner, Familie, etc.)

  • Deployment

Description
No description provided
Readme 33 KiB
Languages
Python 100%