diff --git a/cms/README.md b/cms/README.md index 53248a6..90a504d 100644 --- a/cms/README.md +++ b/cms/README.md @@ -92,6 +92,18 @@ Dann: Admin `…:8080/admin/` · Live `…:8080/` · Preview `…:8080/_preview/ `cd admin && npm install && npm run dev` (Vite-Devserver, proxyt `/api` + `/_preview` an den laufenden Container auf :8080). +### Demo-Inhalt fürs Forum (optional) + +`db/seed-demo.sql` füllt die Forum-Kategorien mit ein paar Beispiel-Threads und +-Wortmeldungen — bewusst **getrennt** von der Migration, damit die Produktion +leer startet. Bei Bedarf manuell einspielen (idempotent, mehrfach lauffähig): + +```bash +docker compose exec -T db psql -U supabase_admin -d postgres < db/seed-demo.sql +``` + +Wieder entfernen: DELETE-Block am Ende der Datei (auskommentiert). + ## Sicherheit / Härtung Eingebaute Schutzmaßnahmen (Stand: Härtungs-Pass): diff --git a/cms/db/seed-demo.sql b/cms/db/seed-demo.sql new file mode 100644 index 0000000..77de6e9 --- /dev/null +++ b/cms/db/seed-demo.sql @@ -0,0 +1,111 @@ +-- OPENBUREAU — OPTIONALER Demo-Inhalt fürs Forum (Dialog). +-- ───────────────────────────────────────────────────────────────────────── +-- NICHT Teil der Migration: bewusst getrennt von schema.sql, damit die +-- Produktion sauber bleibt. Nur bei Bedarf manuell einspielen, z.B.: +-- +-- docker compose exec -T db \ +-- psql -U supabase_admin -d postgres < db/seed-demo.sql +-- +-- Idempotent: feste UUIDs + ON CONFLICT DO NOTHING → mehrfaches Einspielen +-- erzeugt keine Duplikate. Demo-Wortmeldungen haben user_id = NULL (keine +-- echten Konten); author_name/author_role sind nur Anzeigetext. +-- +-- Wieder entfernen: siehe DELETE-Block ganz unten (auskommentiert). +-- ───────────────────────────────────────────────────────────────────────── + +-- ── Threads ─────────────────────────────────────────────────────────────── +insert into public.threads (id, forum_id, key, title, url, kind, author_name, created_at) values + ('a1111111-1111-1111-1111-111111111101', + (select id from public.forums where slug = 'allgemein'), + 't/a1111111-1111-1111-1111-111111111101', + 'Willkommen im OPENBUREAU-Dialog', + '/dialog/?thread=t%2Fa1111111-1111-1111-1111-111111111101', + 'forum', 'Karim', now() - interval '9 days'), + + ('a2222222-2222-2222-2222-222222222202', + (select id from public.forums where slug = 'projekte'), + 't/a2222222-2222-2222-2222-222222222202', + 'Altbausanierung Zürich — Materialwahl Innendämmung', + '/dialog/?thread=t%2Fa2222222-2222-2222-2222-222222222202', + 'forum', 'Karim', now() - interval '6 days'), + + ('a3333333-3333-3333-3333-333333333303', + (select id from public.forums where slug = 'technik'), + 't/a3333333-3333-3333-3333-333333333303', + 'Hugo-Build-Zeiten bei großen Bildmengen', + '/dialog/?thread=t%2Fa3333333-3333-3333-3333-333333333303', + 'forum', 'Mara', now() - interval '3 days'), + + ('a4444444-4444-4444-4444-444444444404', + (select id from public.forums where slug = 'off-topic'), + 't/a4444444-4444-4444-4444-444444444404', + 'Welches Architekturbuch hat euch geprägt?', + '/dialog/?thread=t%2Fa4444444-4444-4444-4444-444444444404', + 'forum', 'Jonas', now() - interval '2 days') +on conflict (key) do nothing; + +-- ── Wortmeldungen ───────────────────────────────────────────────────────── +-- parent_id verweist auf eine andere Wortmeldung (Antwort-Bezug). +insert into public.comments (id, thread, parent_id, author_name, author_role, body, created_at) values + -- Thread 1: Willkommen + ('c1111111-0000-0000-0000-000000000001', + 't/a1111111-1111-1111-1111-111111111101', null, 'Karim', 'Gründer', + 'Hallo zusammen — dieser Bereich ist für den offenen Austausch rund ums Büro: Projekte, Methoden, Werkzeuge. Lest euch ein, schreibt mit.', + now() - interval '9 days'), + ('c1111111-0000-0000-0000-000000000002', + 't/a1111111-1111-1111-1111-111111111101', + 'c1111111-0000-0000-0000-000000000001', 'Mara', 'Projektarchitektin', + 'Schön, dass es losgeht. Gibt es eine Empfehlung, wie wir Projektdiskussionen von allgemeinem Plausch trennen?', + now() - interval '8 days'), + ('c1111111-0000-0000-0000-000000000003', + 't/a1111111-1111-1111-1111-111111111101', + 'c1111111-0000-0000-0000-000000000002', 'Karim', 'Gründer', + 'Genau dafür gibt es die Kategorie „Projekte". „Off-Topic" ist für alles andere.', + now() - interval '8 days'), + + -- Thread 2: Innendämmung + ('c2222222-0000-0000-0000-000000000001', + 't/a2222222-2222-2222-2222-222222222202', null, 'Karim', 'Gründer', + 'Beim Altbau an der Seestrasse steht die Innendämmung an. Kalziumsilikat oder mineralischer Dämmputz? Erfahrungen mit Feuchteverhalten?', + now() - interval '6 days'), + ('c2222222-0000-0000-0000-000000000002', + 't/a2222222-2222-2222-2222-222222222202', + 'c2222222-0000-0000-0000-000000000001', 'Mara', 'Projektarchitektin', + 'Kalziumsilikat ist diffusionsoffen und kapillaraktiv — bei den Bestandswänden dort würde ich das vorziehen. Wichtig ist die Detailausbildung an den Holzbalkenköpfen.', + now() - interval '5 days'), + ('c2222222-0000-0000-0000-000000000003', + 't/a2222222-2222-2222-2222-222222222202', + 'c2222222-0000-0000-0000-000000000002', 'Jonas', 'Bauleiter', + 'Plus eins für Kalziumsilikat. Ich hänge nächste Woche die hygrothermische Simulation an, dann sehen wir die Tauwasserbilanz.', + now() - interval '4 days'), + + -- Thread 3: Hugo-Builds + ('c3333333-0000-0000-0000-000000000001', + 't/a3333333-3333-3333-3333-333333333303', null, 'Mara', 'Projektarchitektin', + 'Seit die Projektgalerien dazugekommen sind, dauert der Build spürbar länger. Hat jemand die Bildverarbeitung schon optimiert?', + now() - interval '3 days'), + ('c3333333-0000-0000-0000-000000000002', + 't/a3333333-3333-3333-3333-333333333303', + 'c3333333-0000-0000-0000-000000000001', 'Karim', 'Gründer', + 'Hugo cached die Image-Resizes unter resources/. Solange der Ordner erhalten bleibt, werden nur neue Bilder neu gerechnet — das war bei uns der größte Hebel.', + now() - interval '2 days'), + + -- Thread 4: Architekturbuch + ('c4444444-0000-0000-0000-000000000001', + 't/a4444444-4444-4444-4444-444444444404', null, 'Jonas', 'Bauleiter', + 'Bei mir war es „Atmosphären" von Peter Zumthor — schmal, aber prägend. Was hat euch geformt?', + now() - interval '2 days'), + ('c4444444-0000-0000-0000-000000000002', + 't/a4444444-4444-4444-4444-444444444404', + 'c4444444-0000-0000-0000-000000000001', 'Mara', 'Projektarchitektin', + '„Complexity and Contradiction" von Venturi — hat mein Verständnis von Fassaden komplett verschoben.', + now() - interval '1 day') +on conflict (id) do nothing; + +-- ── Demo-Inhalt wieder entfernen (bei Bedarf auskommentieren) ────────────── +-- delete from public.comments where id::text like 'c_______-0000-0000-0000-%'; +-- delete from public.threads where key in ( +-- 't/a1111111-1111-1111-1111-111111111101', +-- 't/a2222222-2222-2222-2222-222222222202', +-- 't/a3333333-3333-3333-3333-333333333303', +-- 't/a4444444-4444-4444-4444-444444444404');