Files
Coop-NL/supabase/schema.sql
T
Jakub_HostacnyandClaude Opus 5.5 5d1900740c chore: zalozenie databazy a uloziska na novom serveri
- supabase/schema.sql: idempotentny skript (tabulky, RLS, bucket newsletter-assets)
- supabase/assets + npm run db:upload-assets: staticke obrazky sablony
- adresa uloziska sa sklada z NEXT_PUBLIC_SUPABASE_URL namiesto pevneho projektu
- .env.example a navod na instalaciu v README

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 10:54:55 +02:00

62 lines
2.9 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- Schéma pre Modulárny generátor newsletterov (COOP Jednota)
--
-- Založenie databázy na novom Supabase projekte:
-- Supabase Dashboard → SQL Editor → vložiť celý tento súbor → Run.
-- Skript je idempotentný – dá sa spustiť opakovane bez straty dát.
-- 1. Tabuľka šablón / konceptov newslettera
-- data = { preheader, modules[] } – celý obsah kampane ako JSON
CREATE TABLE IF NOT EXISTS templates (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
title TEXT NOT NULL DEFAULT 'Nový newsletter',
status TEXT NOT NULL DEFAULT 'draft' CHECK (status IN ('draft', 'ready', 'exported')),
data JSONB NOT NULL DEFAULT '{}'::jsonb,
brevo_campaign_id INTEGER,
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
-- Index pre rýchle zoradenie podľa dátumu úpravy
CREATE INDEX IF NOT EXISTS idx_templates_updated_at ON templates(updated_at DESC);
-- 2. Tabuľka šablón cenoviek (Badges)
-- layers_config = { layers[], width, align, paddingTop, paddingBottom }
-- (staršie záznamy môžu mať len pole vrstiev – aplikácia podporuje oba tvary)
CREATE TABLE IF NOT EXISTS badges (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name TEXT NOT NULL,
svg_background_url TEXT,
svg_raw TEXT,
layers_config JSONB NOT NULL DEFAULT '[]'::jsonb,
preview_image_url TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
-- 3. Tabuľka uložených profilov mapovania importu (zatiaľ nevyužitá aplikáciou)
CREATE TABLE IF NOT EXISTS mapping_presets (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
name TEXT NOT NULL,
file_type TEXT NOT NULL CHECK (file_type IN ('csv', 'json', 'xml')),
mapping_rules JSONB NOT NULL DEFAULT '{}'::jsonb,
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
-- 4. RLS (Row Level Security) – interný nástroj: povolený prístup cez anon kľúč
ALTER TABLE templates ENABLE ROW LEVEL SECURITY;
ALTER TABLE badges ENABLE ROW LEVEL SECURITY;
ALTER TABLE mapping_presets ENABLE ROW LEVEL SECURITY;
DROP POLICY IF EXISTS "Allow public all on templates" ON templates;
DROP POLICY IF EXISTS "Allow public all on badges" ON badges;
DROP POLICY IF EXISTS "Allow public all on mapping_presets" ON mapping_presets;
CREATE POLICY "Allow public all on templates" ON templates FOR ALL USING (true) WITH CHECK (true);
CREATE POLICY "Allow public all on badges" ON badges FOR ALL USING (true) WITH CHECK (true);
CREATE POLICY "Allow public all on mapping_presets" ON mapping_presets FOR ALL USING (true) WITH CHECK (true);
-- 5. Úložisko obrázkov (Storage bucket) – verejne čitateľné, aby sa obrázky zobrazili v e-mailoch.
-- Nahrávanie ide cez /api/upload so service_role kľúčom (obchádza RLS), ďalšie politiky netreba.
INSERT INTO storage.buckets (id, name, public)
VALUES ('newsletter-assets', 'newsletter-assets', true)
ON CONFLICT (id) DO UPDATE SET public = true;