Rank 4 and the genre/mechanic filters ran a correlated subplan per game (13 s at 10 000 games). Now: one set-based word coverage, filters as one hashed IN set, 'like all' patterns, similarity only for hits. Adds pgTAP cases found by mutation testing (paging by relevance, alt title choice, duplicate words, mechanic duplicates) and a Deno case for mark characters. Refs #3 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| catalog | ||
| migrations | ||
| templates | ||
| tests | ||
| .gitignore | ||
| config.toml | ||
| README.md | ||
| seed.sql | ||
Supabase – Datenbank für Shuffle
Inhalt
| Pfad | Zweck |
|---|---|
migrations/ |
Schema, Trigger und RLS-Policies für R1 (21 Tabellen, 3 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. |
catalog/ |
Katalog-Vokabular und Startbestand (CSV, Werkzeug build_startbestand.ts, erzeugte SQL-Dateien), siehe unten. |
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_usererzwingt Altersbestätigung, Zustimmung,terms_versionund Anzeigename (1–30 Zeichen). Fehlertexte: siehedocs/datenmodell-r1.md. Clients senden diese Werte alsuser_metadatabeisignUp. - pgTAP-Fixtures, die
auth.usersdirekt füllen, brauchen daherage_confirmed,terms_accepted,terms_versionunddisplay_nameinraw_user_meta_data. - Ergebnisse der GoTrue-Prüfung:
docs/specs/1-auth-spike-ergebnisse.md. - Auth-Einstellungen (
AUTH-CFG-nninconfig.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).
E2E-Tests (Playwright)
e2e/testet GoTrue über Kong (api), die gebaute Web-App (web), die IP-Drosselung (throttle) und den SMTP-Ausfall (spike). Voraussetzung:supabase startmit Mailpit und Postgres (Ports 54321, 54322, 54324).e2e/support/db.tsverbindet sich direkt mit dem lokalen Postgres (Rollepostgres) und setztrecovery_sent_at/confirmation_sent_atfür die Ablauftests; es bricht bei nicht-lokalem Host ab.- Der Extra-Container für
throttle/spikestartet mite2e/support/start-throttle-gotrue.sh. Details:e2e/README.md. - CI: Job
e2ein.forgejo/workflows/ci.yml(Runnerdocker-host, dind); Ablauf indocs/auth-konfiguration.mdAbschnitt 7.
Katalog (KAT-05)
- Pflege in R1 nur über Studio bzw.
psql(Rollepostgres), Ablauf und Regeln:docs/katalog-pflege.md. Spec:docs/specs/2-katalog-daten.md. - Suche und Entdecken lesen nur die View
catalog_games(ohne ausgeblendete und zusammengeführte Spiele). Geänderte Fakten trägt ein Trigger ingames.manual_fieldsein. - Zusammenführen von Duplikaten nur über die Funktion
public.admin_merge_games(quelle, ziel)(nur Datenbankrollepostgres/supabase_admin, nicht über die API aufrufbar); Ablauf indocs/katalog-pflege.md, Abschnitt 5. Jede neue Tabelle mit Verweis aufgamesmuss dort behandelt werden (Wächter intests/database/07_catalog_merge.test.sqlund08_game_reports.test.sql). - Meldungen fehlender Spiele (
game_reports) bearbeitet der Admin nur überpublic.admin_resolve_report(meldung, status, ziel)(nur Datenbankrollepostgres/supabase_admin); Ablauf indocs/katalog-pflege.md, Abschnitt 6.visibilityundowner_ideines Spiels sind unveränderlich (Triggergames_visibility_immutable). db resetspieltseed.sql,catalog/vocabulary.sqlundcatalog/startbestand.sqlein ([db.seed] sql_pathsinconfig.toml). Die SQL-Dateien incatalog/sind erzeugt; Quellen sind die CSV-Dateien. Neu erzeugen und testen (Deno,brew install deno):deno run --allow-read=supabase --allow-write=supabase supabase/catalog/build_startbestand.ts deno test --allow-read=supabase supabase/catalog/- Ein Pfad in
sql_paths, der nicht existiert, wird von der CLI nur mit Warnung übersprungen (kein Fehler). Genauere CLI-Ergebnisse:docs/katalog-pflege.md, Abschnitt 2.7. - pgTAP-Tests, die Include-Dateien brauchen, nutzen
\ir ../support/…; die Dateien intests/support/sind erzeugt (gleiches Werkzeug) und keine Tests.
Regeln
- Jede Tabelle hat
id(uuid, PK),created_at,updated_atund Row Level Security. updated_atsetzt ein Trigger;idundcreated_atsind 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 aususer_metadata; in R1 niemandem vergeben, Pflege über Studio (KAT-05 E10).
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).