120 lines
5.5 KiB
SQL
120 lines
5.5 KiB
SQL
-- ================================================================
|
||
-- WEBSITE CMS – Vollständige Migration (konsolidiert)
|
||
-- Alle Tabellen, Spalten und RLS-Policies in einer Datei.
|
||
-- Im Supabase SQL-Editor einmalig ausführen.
|
||
-- ================================================================
|
||
|
||
-- ── Hero Section ─────────────────────────────────────────────────
|
||
|
||
CREATE TABLE IF NOT EXISTS hero_content (
|
||
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
-- Site / Navbar
|
||
site_name text NOT NULL DEFAULT 'Musterfirma',
|
||
site_tagline text NOT NULL DEFAULT '',
|
||
logo_path text DEFAULT NULL, -- Storage: site-assets
|
||
favicon_path text DEFAULT NULL, -- Storage: site-assets
|
||
-- Hero-Texte
|
||
eyebrow_text text NOT NULL DEFAULT 'Ihr Slogan hier',
|
||
headline1 text NOT NULL DEFAULT 'Wir lieben Qualität.',
|
||
headline2 text NOT NULL DEFAULT 'Ihre Kunden auch.',
|
||
subtext1 text NOT NULL DEFAULT '',
|
||
subtext2 text NOT NULL DEFAULT '',
|
||
-- Buttons
|
||
cta1_text text NOT NULL DEFAULT 'Jetzt anfragen',
|
||
cta1_href text NOT NULL DEFAULT '#kontakt',
|
||
cta2_text text NOT NULL DEFAULT 'Unsere Leistungen',
|
||
cta2_href text NOT NULL DEFAULT '#leistungen',
|
||
-- Hintergrundbild
|
||
bg_image_path text DEFAULT NULL, -- Storage: hero-bilder
|
||
updated_at timestamptz NOT NULL DEFAULT now()
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS hero_badges (
|
||
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
text text NOT NULL,
|
||
reihenfolge int NOT NULL DEFAULT 0
|
||
);
|
||
|
||
-- ── Über uns / About ─────────────────────────────────────────────
|
||
|
||
CREATE TABLE IF NOT EXISTS ueber_uns_content (
|
||
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
eyebrow_text text NOT NULL DEFAULT 'Klein, aber fein',
|
||
absatz1 text NOT NULL DEFAULT '',
|
||
absatz2 text NOT NULL DEFAULT '',
|
||
bild_url text DEFAULT NULL,
|
||
updated_at timestamptz NOT NULL DEFAULT now()
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS ueber_uns_stats (
|
||
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
wert text NOT NULL,
|
||
label text NOT NULL,
|
||
reihenfolge int NOT NULL DEFAULT 0
|
||
);
|
||
|
||
-- ── Galerie ──────────────────────────────────────────────────────
|
||
|
||
CREATE TABLE IF NOT EXISTS galerie_bilder (
|
||
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
storage_path text NOT NULL, -- Storage: galerie-bilder
|
||
alt_text text NOT NULL DEFAULT '',
|
||
reihenfolge int NOT NULL DEFAULT 0
|
||
);
|
||
|
||
-- ── Kontakt ──────────────────────────────────────────────────────
|
||
|
||
CREATE TABLE IF NOT EXISTS kontakt_info (
|
||
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
telefon text NOT NULL DEFAULT '',
|
||
email text NOT NULL DEFAULT '',
|
||
adresse_zeile1 text NOT NULL DEFAULT '',
|
||
adresse_zeile2 text NOT NULL DEFAULT '',
|
||
formular_empfaenger text NOT NULL DEFAULT '',
|
||
updated_at timestamptz NOT NULL DEFAULT now()
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS kontakt_oeffnungszeiten (
|
||
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
tag text NOT NULL,
|
||
von text NOT NULL,
|
||
bis text NOT NULL,
|
||
reihenfolge int NOT NULL DEFAULT 0
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS kontakt_social (
|
||
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||
platform text NOT NULL,
|
||
url text NOT NULL,
|
||
reihenfolge int NOT NULL DEFAULT 0
|
||
);
|
||
|
||
-- ── RLS: Öffentliche Leseberechtigung (Anon-Key) ─────────────────
|
||
|
||
ALTER TABLE hero_content ENABLE ROW LEVEL SECURITY;
|
||
ALTER TABLE hero_badges ENABLE ROW LEVEL SECURITY;
|
||
ALTER TABLE ueber_uns_content ENABLE ROW LEVEL SECURITY;
|
||
ALTER TABLE ueber_uns_stats ENABLE ROW LEVEL SECURITY;
|
||
ALTER TABLE galerie_bilder ENABLE ROW LEVEL SECURITY;
|
||
ALTER TABLE kontakt_info ENABLE ROW LEVEL SECURITY;
|
||
ALTER TABLE kontakt_oeffnungszeiten ENABLE ROW LEVEL SECURITY;
|
||
ALTER TABLE kontakt_social ENABLE ROW LEVEL SECURITY;
|
||
|
||
DROP POLICY IF EXISTS "public read" ON hero_content;
|
||
DROP POLICY IF EXISTS "public read" ON hero_badges;
|
||
DROP POLICY IF EXISTS "public read" ON ueber_uns_content;
|
||
DROP POLICY IF EXISTS "public read" ON ueber_uns_stats;
|
||
DROP POLICY IF EXISTS "public read" ON galerie_bilder;
|
||
DROP POLICY IF EXISTS "public read" ON kontakt_info;
|
||
DROP POLICY IF EXISTS "public read" ON kontakt_oeffnungszeiten;
|
||
DROP POLICY IF EXISTS "public read" ON kontakt_social;
|
||
|
||
CREATE POLICY "public read" ON hero_content FOR SELECT TO public USING (true);
|
||
CREATE POLICY "public read" ON hero_badges FOR SELECT TO public USING (true);
|
||
CREATE POLICY "public read" ON ueber_uns_content FOR SELECT TO public USING (true);
|
||
CREATE POLICY "public read" ON ueber_uns_stats FOR SELECT TO public USING (true);
|
||
CREATE POLICY "public read" ON galerie_bilder FOR SELECT TO public USING (true);
|
||
CREATE POLICY "public read" ON kontakt_info FOR SELECT TO public USING (true);
|
||
CREATE POLICY "public read" ON kontakt_oeffnungszeiten FOR SELECT TO public USING (true);
|
||
CREATE POLICY "public read" ON kontakt_social FOR SELECT TO public USING (true);
|