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:
1 parent
eb92d30dc3
commit
5d1900740c
37 files changed
+178
-96
No files matched your search
@@ -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;
|
||||
Reference in new issue
Block a user