51 lines
2.0 KiB
SQL
51 lines
2.0 KiB
SQL
-- 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);
|