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>
This commit is contained in:
Jakub_HostacnyandClaude Opus 5.5 committed 2026-10-19 10:54:55 +02:00
1 parent eb92d30dc3
commit 5d1900740c
37 files changed
+178 -96

No files matched your search

+61
View File
@@ -0,0 +1,61 @@
-- 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;