-- Enable UUID extension create extension if not exists "uuid-ossp"; -- 1. USERS & PROFILES (Managed by Supabase Auth, but we can have a public profile) create table if not exists public.profiles ( id uuid references auth.users not null primary key, email text, full_name text, role text default 'Buyer', created_at timestamp with time zone default timezone('utc'::text, now()) not null ); -- 2. INVENTORY (Products) create table if not exists public.inventory ( id uuid default uuid_generate_v4() primary key, created_at timestamp with time zone default timezone('utc'::text, now()) not null, name text not null, sku text, ean text, quantity integer default 0, avg_cost_brl numeric default 0, market_price_brl numeric default 0, last_supplier text, user_id uuid references auth.users ); -- 3. SUPPLIERS create table if not exists public.suppliers ( id uuid default uuid_generate_v4() primary key, created_at timestamp with time zone default timezone('utc'::text, now()) not null, name text not null, contact text, rating integer default 0, last_purchase timestamp with time zone, user_id uuid references auth.users ); -- 4. CUSTOMERS create table if not exists public.customers ( id uuid default uuid_generate_v4() primary key, created_at timestamp with time zone default timezone('utc'::text, now()) not null, name text not null, email text, phone text, city text, status text default 'Active', -- 'Active', 'Inactive', 'Prospect' total_purchased numeric default 0, user_id uuid references auth.users ); -- 5. ORDERS create table if not exists public.orders ( id uuid default uuid_generate_v4() primary key, created_at timestamp with time zone default timezone('utc'::text, now()) not null, date timestamp with time zone, status text default 'Pending', -- 'Pending', 'Paid', 'Received', 'Cancelled' total_usd numeric default 0, total_brl numeric default 0, total_cost_with_overhead numeric default 0, estimated_profit numeric default 0, items jsonb, -- Stores the JSON array of items supplier_name text, user_id uuid references auth.users ); -- 6. TRANSACTIONS (Financial) create table if not exists public.transactions ( id uuid default uuid_generate_v4() primary key, created_at timestamp with time zone default timezone('utc'::text, now()) not null, date timestamp with time zone, type text, -- 'Income', 'Expense' category text, amount numeric default 0, description text, user_id uuid references auth.users ); -- 7. SETTINGS (Global Config) create table if not exists public.settings ( id uuid default uuid_generate_v4() primary key, created_at timestamp with time zone default timezone('utc'::text, now()) not null, updated_at timestamp with time zone default timezone('utc'::text, now()), -- Company Info company_name text, cnpj text, ie text, -- Financial Defaults default_overhead numeric default 20, default_exchange numeric default 5.65, -- Integration Tokens brazil_api_token text, melhor_envio_token text, bling_token text, tiny_token text, gemini_key text, -- Fiscal / NFe certificate_password text, -- CAUTION: Storing plain text/base64? Ideally encrypted. nfe_serie text default '1', nfe_number text, nfe_environment text default 'homologacao', -- Email SMTP smtp_host text, smtp_port text, smtp_user text, smtp_pass text, -- Automation auto_sync_sales boolean default true, auto_sync_stock boolean default true, user_id uuid references auth.users ); -- RLS POLICIES (Optional but recommended) alter table public.inventory enable row level security; alter table public.suppliers enable row level security; alter table public.customers enable row level security; alter table public.orders enable row level security; alter table public.transactions enable row level security; alter table public.settings enable row level security; -- (Policies would need to be added to allow read/write for authenticated users)