-- Enable UUID extension CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; -- Products Table CREATE TABLE IF NOT EXISTS public.products ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), name TEXT NOT NULL, description TEXT, base_price DECIMAL(10, 2) NOT NULL DEFAULT 0.00, tax_rate DECIMAL(5, 2) NOT NULL DEFAULT 19.00, created_at TIMESTAMP WITH TIME ZONE DEFAULT timezone('utc'::text, now()) NOT NULL ); -- Product Modules Table CREATE TABLE IF NOT EXISTS public.product_modules ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), product_id UUID REFERENCES public.products(id) ON DELETE CASCADE, name TEXT NOT NULL, description TEXT, price DECIMAL(10, 2) NOT NULL DEFAULT 0.00, requirements UUID[] DEFAULT '{}', exclusions UUID[] DEFAULT '{}', created_at TIMESTAMP WITH TIME ZONE DEFAULT timezone('utc'::text, now()) NOT NULL ); -- Orders Table CREATE TABLE IF NOT EXISTS public.orders ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), user_id UUID REFERENCES auth.users(id), customer_data JSONB NOT NULL, order_data JSONB NOT NULL, total_price DECIMAL(10, 2) NOT NULL, pdf_url TEXT, status TEXT NOT NULL DEFAULT 'pending', created_at TIMESTAMP WITH TIME ZONE DEFAULT timezone('utc'::text, now()) NOT NULL ); -- Enable Row Level Security ALTER TABLE public.products ENABLE ROW LEVEL SECURITY; ALTER TABLE public.product_modules ENABLE ROW LEVEL SECURITY; ALTER TABLE public.orders ENABLE ROW LEVEL SECURITY; -- Policies -- Products: Read for everyone, Write for authenticated admins (simplified for now) CREATE POLICY "Allow public read access on products" ON public.products FOR SELECT USING (true); CREATE POLICY "Allow public read access on product_modules" ON public.product_modules FOR SELECT USING (true); -- Orders: Users can only see their own orders CREATE POLICY "Users can view their own orders" ON public.orders FOR SELECT USING (auth.uid() = user_id); CREATE POLICY "Users can create their own orders" ON public.orders FOR INSERT WITH CHECK (auth.uid() = user_id);