Shuffle/supabase
cschlaefke fb0f4b9d3f
All checks were successful
CI / flutter (pull_request) Successful in 1m3s
CI / web-build (pull_request) Successful in 58s
CI / supabase (pull_request) Successful in 3s
CI / supabase-tests (pull_request) Successful in 34s
fix(db): trim all Unicode whitespace in display name, harden templates
- add public.trim_ws mirroring Dart String.trim
- require JSON string metadata, tolerate non-string locale in templates
- add tests, align docs with review

Refs #1

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-02 23:48:01 +01:00
..
migrations fix(db): trim all Unicode whitespace in display name, harden templates 2026-11-02 23:48:01 +01:00
templates fix(db): trim all Unicode whitespace in display name, harden templates 2026-11-02 23:48:01 +01:00
tests/database fix(db): trim all Unicode whitespace in display name, harden templates 2026-11-02 23:48:01 +01:00
.gitignore chore(supabase): add config.toml and ignore app env files 2026-11-02 20:12:09 +01:00
config.toml fix(db): trim all Unicode whitespace in display name, harden templates 2026-11-02 23:48:01 +01:00
README.md feat(auth): configure Supabase Auth and add de/en mail templates 2026-11-02 23:23:06 +01:00
seed.sql chore: initial project kit 2026-11-02 12:14:09 +01:00

Supabase – Datenbank für Shuffle

Inhalt

Pfad Zweck
migrations/ Schema, Trigger und RLS-Policies für R1 (17 Tabellen, 2 Views). Nur additiv ändern, nie bestehende Dateien editieren.
tests/database/ pgTAP-Tests: Struktur-Regeln und Zugriffsrechte je Bereich.
templates/ Auth-Mailvorlagen (HTML, Go-Template) für Bestätigung und Passwort-Reset.
seed.sql Beispieldaten nur für die lokale Entwicklung.

Lokal starten und testen

supabase start          # lokales Backend
supabase db reset       # Migrationen + Seed einspielen
supabase test db        # alle pgTAP-Tests ausführen

Registrierung (KTO-01)

  • Der Trigger handle_new_user erzwingt Altersbestätigung, Zustimmung, terms_version und Anzeigename (1–30 Zeichen). Fehlertexte: siehe docs/datenmodell-r1.md. Clients senden diese Werte als user_metadata bei signUp.
  • pgTAP-Fixtures, die auth.users direkt füllen, brauchen daher age_confirmed, terms_accepted, terms_version und display_name in raw_user_meta_data.
  • Ergebnisse der GoTrue-Prüfung: docs/specs/1-auth-spike-ergebnisse.md.
  • Auth-Einstellungen (AUTH-CFG-nn in config.toml), Env-Block für Staging/Produktion, Release-Checkliste und bekannte Grenzen: docs/auth-konfiguration.md.
  • Mailvorlagen (Bestätigung, Passwort-Reset; de/en nach user_metadata.locale): templates/. Lokal landen Mails in Mailpit (http://127.0.0.1:54324).

Regeln

  • Jede Tabelle hat id (uuid, PK), created_at, updated_at und Row Level Security.
  • updated_at setzt ein Trigger; id und created_at sind nach dem Anlegen unveränderlich.
  • Fremdschlüssel nur dort, wo Tabellen in Beziehung stehen, benannt <Zieltabelle>_id.
  • Rechte werden explizit vergeben (erst alles entziehen, dann gezielt gewähren).
  • Admin-Rolle kommt aus app_metadata.role = 'admin' im JWT, nie aus user_metadata.

Noch nicht enthalten

  • Storage-Buckets und -Policies für Avatare und Spielbilder.
  • Edge Functions (BGG-Import, Konto löschen).
  • Selbst-Hosting-Setup auf Hetzner (ADR-0002, Aufgabe für devops).