erp-cicd/my-access-hub-main/supabase/migrations/20250810044038_9113b941-fec9-4157-a9b5-f7a665303d97.sql
Ali 20e95c2fb6
Some checks failed
Build & Deploy Frontend / build-push-deploy (push) Failing after 15s
pushing all
2025-08-30 11:51:11 +05:30

96 lines
3.2 KiB
PL/PgSQL

-- Create email accounts table to store user email configurations
CREATE TABLE public.email_accounts (
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
user_id UUID NOT NULL,
email_address TEXT NOT NULL,
provider TEXT NOT NULL, -- 'gmail', 'outlook', 'imap', etc.
display_name TEXT,
is_primary BOOLEAN DEFAULT FALSE,
is_active BOOLEAN DEFAULT TRUE,
settings JSONB, -- Store provider-specific settings
access_token_encrypted TEXT, -- Store encrypted access tokens
refresh_token_encrypted TEXT,
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
UNIQUE(user_id, email_address)
);
-- Create email folders table
CREATE TABLE public.email_folders (
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
account_id UUID NOT NULL REFERENCES email_accounts(id) ON DELETE CASCADE,
user_id UUID NOT NULL,
folder_id TEXT NOT NULL, -- Provider's folder ID
name TEXT NOT NULL,
type TEXT NOT NULL, -- 'inbox', 'sent', 'drafts', 'custom', etc.
parent_folder_id TEXT,
message_count INTEGER DEFAULT 0,
unread_count INTEGER DEFAULT 0,
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
UNIQUE(account_id, folder_id)
);
-- Create email labels table (for Gmail-style labels)
CREATE TABLE public.email_labels (
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
account_id UUID NOT NULL REFERENCES email_accounts(id) ON DELETE CASCADE,
user_id UUID NOT NULL,
label_id TEXT NOT NULL, -- Provider's label ID
name TEXT NOT NULL,
type TEXT NOT NULL, -- 'system', 'user'
color TEXT,
message_count INTEGER DEFAULT 0,
unread_count INTEGER DEFAULT 0,
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
UNIQUE(account_id, label_id)
);
-- Enable Row Level Security
ALTER TABLE public.email_accounts ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.email_folders ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.email_labels ENABLE ROW LEVEL SECURITY;
-- Create RLS policies for email_accounts
CREATE POLICY "Users can manage their email accounts"
ON public.email_accounts
FOR ALL
USING (user_id = auth.uid());
-- Create RLS policies for email_folders
CREATE POLICY "Users can manage their email folders"
ON public.email_folders
FOR ALL
USING (user_id = auth.uid());
-- Create RLS policies for email_labels
CREATE POLICY "Users can manage their email labels"
ON public.email_labels
FOR ALL
USING (user_id = auth.uid());
-- Create function to update timestamps
CREATE OR REPLACE FUNCTION public.update_updated_at_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = now();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- Create triggers for automatic timestamp updates
CREATE TRIGGER update_email_accounts_updated_at
BEFORE UPDATE ON public.email_accounts
FOR EACH ROW
EXECUTE FUNCTION public.update_updated_at_column();
CREATE TRIGGER update_email_folders_updated_at
BEFORE UPDATE ON public.email_folders
FOR EACH ROW
EXECUTE FUNCTION public.update_updated_at_column();
CREATE TRIGGER update_email_labels_updated_at
BEFORE UPDATE ON public.email_labels
FOR EACH ROW
EXECUTE FUNCTION public.update_updated_at_column();