feat: Complete Corporate Site Deployment Checkpoint
This commit is contained in:
123
cms_migration.sql
Normal file
123
cms_migration.sql
Normal file
@@ -0,0 +1,123 @@
|
||||
-- Enable UUID extension if not enabled
|
||||
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
|
||||
|
||||
-- 1. Site Contents Table (Genel İçerikler)
|
||||
CREATE TABLE IF NOT EXISTS public.site_contents (
|
||||
key TEXT PRIMARY KEY,
|
||||
value TEXT,
|
||||
type TEXT DEFAULT 'text', -- 'text', 'image_url', 'html', 'json'
|
||||
section TEXT, -- 'home', 'about', 'contact', 'footer'
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT timezone('utc'::text, now()) NOT NULL,
|
||||
updated_at TIMESTAMP WITH TIME ZONE DEFAULT timezone('utc'::text, now()) NOT NULL
|
||||
);
|
||||
|
||||
-- RLS: Public read, Admin write
|
||||
ALTER TABLE public.site_contents ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
DROP POLICY IF EXISTS "Allow public read access on site_contents" ON public.site_contents;
|
||||
CREATE POLICY "Allow public read access on site_contents"
|
||||
ON public.site_contents FOR SELECT TO anon, authenticated
|
||||
USING (true);
|
||||
|
||||
DROP POLICY IF EXISTS "Allow authenticated update on site_contents" ON public.site_contents;
|
||||
CREATE POLICY "Allow authenticated update on site_contents"
|
||||
ON public.site_contents FOR UPDATE TO authenticated
|
||||
USING (true)
|
||||
WITH CHECK (true);
|
||||
|
||||
DROP POLICY IF EXISTS "Allow authenticated insert on site_contents" ON public.site_contents;
|
||||
CREATE POLICY "Allow authenticated insert on site_contents"
|
||||
ON public.site_contents FOR INSERT TO authenticated
|
||||
WITH CHECK (true);
|
||||
|
||||
-- 2. Services Table (Hizmetler)
|
||||
CREATE TABLE IF NOT EXISTS public.services (
|
||||
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
|
||||
title TEXT NOT NULL,
|
||||
description TEXT,
|
||||
image_url TEXT,
|
||||
"order" INTEGER DEFAULT 0,
|
||||
is_active BOOLEAN DEFAULT true,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT timezone('utc'::text, now()) NOT NULL
|
||||
);
|
||||
|
||||
ALTER TABLE public.services ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
DROP POLICY IF EXISTS "Allow public read on services" ON public.services;
|
||||
CREATE POLICY "Allow public read on services"
|
||||
ON public.services FOR SELECT TO anon, authenticated
|
||||
USING (is_active = true OR auth.role() = 'authenticated');
|
||||
|
||||
DROP POLICY IF EXISTS "Allow admin all on services" ON public.services;
|
||||
CREATE POLICY "Allow admin all on services"
|
||||
ON public.services FOR ALL TO authenticated
|
||||
USING (true)
|
||||
WITH CHECK (true);
|
||||
|
||||
-- 3. Gallery Table (Galeri)
|
||||
CREATE TABLE IF NOT EXISTS public.gallery (
|
||||
id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
|
||||
image_url TEXT NOT NULL,
|
||||
caption TEXT,
|
||||
category TEXT DEFAULT 'Genel',
|
||||
"order" INTEGER DEFAULT 0,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT timezone('utc'::text, now()) NOT NULL
|
||||
);
|
||||
|
||||
ALTER TABLE public.gallery ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
DROP POLICY IF EXISTS "Allow public read on gallery" ON public.gallery;
|
||||
CREATE POLICY "Allow public read on gallery"
|
||||
ON public.gallery FOR SELECT TO anon, authenticated
|
||||
USING (true);
|
||||
|
||||
DROP POLICY IF EXISTS "Allow admin all on gallery" ON public.gallery;
|
||||
CREATE POLICY "Allow admin all on gallery"
|
||||
ON public.gallery FOR ALL TO authenticated
|
||||
USING (true)
|
||||
WITH CHECK (true);
|
||||
|
||||
|
||||
-- 4. Storage Bucket for Public Site
|
||||
INSERT INTO storage.buckets (id, name, public)
|
||||
VALUES ('public-site', 'public-site', true)
|
||||
ON CONFLICT (id) DO NOTHING;
|
||||
|
||||
-- Storage Policies (Renamed to avoid conflicts)
|
||||
-- Note: 'storage.objects' is a shared table, so policy names must be unique or scoped.
|
||||
|
||||
-- Allow public read SPECIFIC to this bucket
|
||||
DROP POLICY IF EXISTS "Public Access public-site" ON storage.objects;
|
||||
CREATE POLICY "Public Access public-site"
|
||||
ON storage.objects FOR SELECT
|
||||
TO public
|
||||
USING ( bucket_id = 'public-site' );
|
||||
|
||||
-- Allow authenticated upload/delete SPECIFIC to this bucket
|
||||
DROP POLICY IF EXISTS "Authenticated Insert public-site" ON storage.objects;
|
||||
CREATE POLICY "Authenticated Insert public-site"
|
||||
ON storage.objects FOR INSERT
|
||||
TO authenticated
|
||||
WITH CHECK ( bucket_id = 'public-site' );
|
||||
|
||||
DROP POLICY IF EXISTS "Authenticated Update public-site" ON storage.objects;
|
||||
CREATE POLICY "Authenticated Update public-site"
|
||||
ON storage.objects FOR UPDATE
|
||||
TO authenticated
|
||||
USING ( bucket_id = 'public-site' );
|
||||
|
||||
DROP POLICY IF EXISTS "Authenticated Delete public-site" ON storage.objects;
|
||||
CREATE POLICY "Authenticated Delete public-site"
|
||||
ON storage.objects FOR DELETE
|
||||
TO authenticated
|
||||
USING ( bucket_id = 'public-site' );
|
||||
|
||||
-- Seed Data (Initial Content)
|
||||
INSERT INTO public.site_contents (key, value, type, section) VALUES
|
||||
('site_title', 'Rüya Düğün Salonu', 'text', 'general'),
|
||||
('hero_title', 'Hayallerinizdeki Düğün İçin', 'text', 'home'),
|
||||
('hero_subtitle', 'Unutulmaz anlar, profesyonel hizmet ve şık atmosfer.', 'text', 'home'),
|
||||
('contact_phone', '+90 555 123 45 67', 'text', 'contact'),
|
||||
('contact_address', 'Atatürk Mah. Karanfil Sok. No:5, İstanbul', 'text', 'contact'),
|
||||
('site_logo', '', 'image_url', 'general')
|
||||
ON CONFLICT (key) DO NOTHING;
|
||||
Reference in New Issue
Block a user