All checks were successful
Build & Deploy Frontend / build-push-deploy (push) Successful in 1m45s
97 lines
3.1 KiB
SQL
97 lines
3.1 KiB
SQL
-- Create emails table to store actual email messages
|
|
CREATE TABLE public.emails (
|
|
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
account_id UUID NOT NULL REFERENCES public.email_accounts(id) ON DELETE CASCADE,
|
|
user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
|
|
folder_id TEXT NOT NULL,
|
|
message_id TEXT NOT NULL,
|
|
thread_id TEXT,
|
|
subject TEXT NOT NULL DEFAULT '',
|
|
sender_name TEXT,
|
|
sender_email TEXT NOT NULL,
|
|
recipient_emails TEXT[] DEFAULT '{}',
|
|
cc_emails TEXT[] DEFAULT '{}',
|
|
bcc_emails TEXT[] DEFAULT '{}',
|
|
body_text TEXT,
|
|
body_html TEXT,
|
|
received_date TIMESTAMP WITH TIME ZONE NOT NULL,
|
|
is_read BOOLEAN NOT NULL DEFAULT false,
|
|
is_starred BOOLEAN NOT NULL DEFAULT false,
|
|
is_important BOOLEAN NOT NULL DEFAULT false,
|
|
has_attachments BOOLEAN NOT NULL DEFAULT false,
|
|
labels TEXT[] DEFAULT '{}',
|
|
size_bytes 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, message_id)
|
|
);
|
|
|
|
-- Create email attachments table
|
|
CREATE TABLE public.email_attachments (
|
|
id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY,
|
|
email_id UUID NOT NULL REFERENCES public.emails(id) ON DELETE CASCADE,
|
|
filename TEXT NOT NULL,
|
|
content_type TEXT,
|
|
size_bytes INTEGER DEFAULT 0,
|
|
attachment_data BYTEA,
|
|
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now()
|
|
);
|
|
|
|
-- Enable RLS on emails table
|
|
ALTER TABLE public.emails ENABLE ROW LEVEL SECURITY;
|
|
|
|
-- Create RLS policies for emails
|
|
CREATE POLICY "Users can view their own emails"
|
|
ON public.emails
|
|
FOR SELECT
|
|
USING (auth.uid() = user_id);
|
|
|
|
CREATE POLICY "Users can update their own emails"
|
|
ON public.emails
|
|
FOR UPDATE
|
|
USING (auth.uid() = user_id);
|
|
|
|
CREATE POLICY "Users can insert their own emails"
|
|
ON public.emails
|
|
FOR INSERT
|
|
WITH CHECK (auth.uid() = user_id);
|
|
|
|
CREATE POLICY "Users can delete their own emails"
|
|
ON public.emails
|
|
FOR DELETE
|
|
USING (auth.uid() = user_id);
|
|
|
|
-- Enable RLS on email attachments
|
|
ALTER TABLE public.email_attachments ENABLE ROW LEVEL SECURITY;
|
|
|
|
-- Create RLS policies for email attachments
|
|
CREATE POLICY "Users can view their own email attachments"
|
|
ON public.email_attachments
|
|
FOR SELECT
|
|
USING (EXISTS (
|
|
SELECT 1 FROM public.emails
|
|
WHERE emails.id = email_attachments.email_id
|
|
AND emails.user_id = auth.uid()
|
|
));
|
|
|
|
CREATE POLICY "Users can manage their own email attachments"
|
|
ON public.email_attachments
|
|
FOR ALL
|
|
USING (EXISTS (
|
|
SELECT 1 FROM public.emails
|
|
WHERE emails.id = email_attachments.email_id
|
|
AND emails.user_id = auth.uid()
|
|
));
|
|
|
|
-- Add indexes for better performance
|
|
CREATE INDEX idx_emails_account_folder ON public.emails(account_id, folder_id);
|
|
CREATE INDEX idx_emails_user_received_date ON public.emails(user_id, received_date DESC);
|
|
CREATE INDEX idx_emails_is_read ON public.emails(user_id, is_read);
|
|
CREATE INDEX idx_emails_is_starred ON public.emails(user_id, is_starred);
|
|
CREATE INDEX idx_emails_message_id ON public.emails(account_id, message_id);
|
|
|
|
-- Create trigger for updating timestamps
|
|
CREATE TRIGGER update_emails_updated_at
|
|
BEFORE UPDATE ON public.emails
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION public.update_updated_at_column(); |