erp-cicd/frontend/supabase/migrations/20250810134333_2195614a-24b9-4af1-bfb7-5d699ba6d044.sql
Ali af6fd7bcad
All checks were successful
Build & Deploy Frontend / build-push-deploy (push) Successful in 1m45s
added some
2025-08-30 11:57:49 +05:30

136 lines
4.3 KiB
SQL

-- Create company profile table
CREATE TABLE public.company_profile (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
company_name TEXT NOT NULL,
company_logo_url TEXT,
address_line1 TEXT,
address_line2 TEXT,
city TEXT,
state TEXT,
postal_code TEXT,
country TEXT,
phone TEXT,
email TEXT,
website TEXT,
tax_id TEXT,
registration_number TEXT,
industry TEXT,
employee_count INTEGER,
founded_year INTEGER,
description TEXT,
timezone TEXT DEFAULT 'UTC',
currency TEXT DEFAULT 'USD',
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now()
);
-- Create email settings table for SMTP/IMAP
CREATE TABLE public.email_settings (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
smtp_host TEXT NOT NULL,
smtp_port INTEGER NOT NULL DEFAULT 587,
smtp_username TEXT NOT NULL,
smtp_password TEXT NOT NULL,
smtp_encryption TEXT NOT NULL DEFAULT 'tls', -- 'tls', 'ssl', 'none'
smtp_from_email TEXT NOT NULL,
smtp_from_name TEXT NOT NULL,
imap_host TEXT,
imap_port INTEGER DEFAULT 993,
imap_username TEXT,
imap_password TEXT,
imap_encryption TEXT DEFAULT 'ssl',
is_enabled BOOLEAN NOT NULL DEFAULT false,
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now()
);
-- Create SMS gateway settings table
CREATE TABLE public.sms_settings (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
provider TEXT NOT NULL, -- 'twilio', 'nexmo', 'textlocal', 'custom'
api_key TEXT NOT NULL,
api_secret TEXT,
sender_id TEXT,
base_url TEXT, -- for custom providers
webhook_url TEXT,
is_enabled BOOLEAN NOT NULL DEFAULT false,
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now()
);
-- Create WhatsApp Business API settings table
CREATE TABLE public.whatsapp_settings (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
provider TEXT NOT NULL DEFAULT 'meta', -- 'meta', 'twilio', 'custom'
phone_number_id TEXT NOT NULL,
access_token TEXT NOT NULL,
business_account_id TEXT,
webhook_verify_token TEXT,
webhook_url TEXT,
is_enabled BOOLEAN NOT NULL DEFAULT false,
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now()
);
-- Create notification preferences table
CREATE TABLE public.notification_settings (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email_notifications BOOLEAN NOT NULL DEFAULT true,
sms_notifications BOOLEAN NOT NULL DEFAULT false,
whatsapp_notifications BOOLEAN NOT NULL DEFAULT false,
push_notifications BOOLEAN NOT NULL DEFAULT true,
notification_types JSONB DEFAULT '{"reminders": true, "payments": true, "system": true, "security": true}',
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now()
);
-- Enable RLS on all tables
ALTER TABLE public.company_profile ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.email_settings ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.sms_settings ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.whatsapp_settings ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.notification_settings ENABLE ROW LEVEL SECURITY;
-- Create policies (admin only access)
CREATE POLICY "Admins can manage company profile" ON public.company_profile
FOR ALL
USING (has_role(auth.uid(), 'admin'::app_role));
CREATE POLICY "Anyone can read company profile" ON public.company_profile
FOR SELECT
USING (true);
CREATE POLICY "Admins can manage email settings" ON public.email_settings
FOR ALL
USING (has_role(auth.uid(), 'admin'::app_role));
CREATE POLICY "Admins can manage SMS settings" ON public.sms_settings
FOR ALL
USING (has_role(auth.uid(), 'admin'::app_role));
CREATE POLICY "Admins can manage WhatsApp settings" ON public.whatsapp_settings
FOR ALL
USING (has_role(auth.uid(), 'admin'::app_role));
CREATE POLICY "Admins can manage notification settings" ON public.notification_settings
FOR ALL
USING (has_role(auth.uid(), 'admin'::app_role));
CREATE POLICY "Anyone can read notification settings" ON public.notification_settings
FOR SELECT
USING (true);
-- Insert default records
INSERT INTO public.company_profile (
company_name,
email,
timezone,
currency
) VALUES (
'Your Company Name',
'admin@company.com',
'UTC',
'USD'
);
INSERT INTO public.notification_settings DEFAULT VALUES;