feat: implement logic engine for module dependencies and exclusions

This commit is contained in:
DanielS
2026-05-01 00:52:34 +02:00
parent a73cc387ec
commit 17d5a78467
3 changed files with 190 additions and 38 deletions

View File

@@ -0,0 +1,50 @@
-- 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);