-- Schéma pre Modulárny generátor newsletterov (COOP Jednota) -- 1. Tabuľka šablón / konceptov newslettera 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 cenoviek (Badges) 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 (Data Mapper Presets) 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. Východiskové referenčné cenovky (Seed dát pre COOP Jednota) INSERT INTO badges (name, svg_raw, layers_config) VALUES ( 'Žltá AKCIA', '', '[ {"id": "l1", "type": "text", "text": "AKCIA", "x": 80, "y": 32, "fontSize": 24, "fontWeight": "900", "fill": "#e0001b", "align": "center"}, {"id": "l2", "type": "text", "text": "{zlava}", "x": 80, "y": 64, "fontSize": 22, "fontWeight": "800", "fill": "#001a33", "align": "center"} ]'::jsonb ), ( 'Červená SUPER CENA', '', '[ {"id": "l1", "type": "text", "text": "SUPER CENA", "x": 80, "y": 34, "fontSize": 18, "fontWeight": "900", "fill": "#ffffff", "align": "center"}, {"id": "l2", "type": "text", "text": "{zlava}", "x": 80, "y": 64, "fontSize": 24, "fontWeight": "900", "fill": "#ffd100", "align": "center"} ]'::jsonb ), ( 'Percentuálna zľava (Kruh)', '', '[ {"id": "l1", "type": "text", "text": "ZĽAVA", "x": 50, "y": 36, "fontSize": 13, "fontWeight": "800", "fill": "#ffffff", "align": "center"}, {"id": "l2", "type": "text", "text": "{zlava}%", "x": 50, "y": 68, "fontSize": 24, "fontWeight": "900", "fill": "#ffd100", "align": "center"} ]'::jsonb ) ON CONFLICT DO NOTHING; -- 5. Nastavenie RLS (Row Level Security) - pre interný nástroj povolíme verejný 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; 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);