|
All checks were successful
Filters are evaluated once into an id set used by both search branches. Adds tests for age/genre/mechanic filters with a search term, rank 2 vs 3 and null p_limit. approxNormalize uses NFKD. Perf script checks confirm_local value and unix socket and re-analyzes after rollback. Adds docs/specs/3-katalog-suche-umsetzung.md (measurements, log check incl. GET finding), release checklist section 2a and the CSV-only note for alt titles. Refs #3 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| catalog | ||
| migrations | ||
| perf | ||
| 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 (22 Tabellen, 3 Views). Nur additiv ändern, nie bestehende Dateien editieren. |
tests/database/ |
pgTAP-Tests: Struktur-Regeln und Zugriffsrechte je Bereich. |
perf/ |
Messskript für die Katalogsuche (kein Test, läuft nicht in supabase test db). |
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, Auth-Checkliste und bekannte Grenzen:docs/auth-konfiguration.md. Zentrale Release-Checkliste (Katalog,checks.sql, Zugang, Auth/SMTP, Runner):docs/release-checkliste.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.
Katalogsuche (KAT-01)
public.search_normalize(text)(Normalisierung für Suche und Titelvergleich) und die RPCpublic.search_catalog_games(…)sind für API-Rollen ausführbar (search_normalize:anon,authenticated,service_role, weil generierte Spalten mit den Rechten des Schreibenden rechnen;search_catalog_games:anon,authenticated). Beides ist die Ausnahme von der Regel „Funktionen sind für niemanden aufrufbar“; die Rechte prüfttests/database/09_catalog_search.test.sql.- Alternative Titel (
game_alt_titles) sind für API-Rollen nur lesbar; Pflege über Studio (docs/katalog-pflege.md, Abschnitt 3.1) und die CSV-Spaltealt_titles(de:Titel;en:Title,;im Titel nicht erlaubt). - Nach einem Image-Upgrade der Datenbank die Normalisierung prüfen (
docs/katalog-pflege.md, Abschnitt 8). - Messskript für das Zeitbudget der Suche (nur lokal, nie gegen Staging/Produktion, bewusst nicht unter
tests/):perf/catalog_search_perf.sql, Aufruf im Kopfkommentar.
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).