Adds display name validation, terms_version, locale sync trigger and pgTAP tests (KTO-01 criteria 1, 2, 10, 11). Includes GoTrue spike results. Refs #1 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
32 lines
1.7 KiB
Markdown
32 lines
1.7 KiB
Markdown
# 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. |
|
||
| `seed.sql` | Beispieldaten nur für die lokale Entwicklung. |
|
||
|
||
## Lokal starten und testen
|
||
```bash
|
||
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`.
|
||
|
||
## 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`).
|