CREATE TABLE IF NOT EXISTS public.email_inbox_configs ( id UUID NOT NULL DEFAULT gen_random_uuid() PRIMARY KEY, user_id UUID NOT NULL, display_name TEXT NOT NULL, email_address TEXT NOT NULL, imap_host TEXT NOT NULL, imap_port INTEGER NOT NULL DEFAULT 993, imap_username TEXT NOT NULL, imap_password TEXT NOT NULL, use_tls BOOLEAN NOT NULL DEFAULT true, is_active BOOLEAN NOT NULL DEFAULT true, created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now() ); ALTER TABLE public.email_inbox_configs ENABLE ROW LEVEL SECURITY; CREATE POLICY "Staff can view inbox configs" ON public.email_inbox_configs FOR SELECT TO authenticated USING ( public.has_role(auth.uid(), 'admin'::public.app_role) OR public.has_role(auth.uid(), 'manager'::public.app_role) ); CREATE POLICY "Staff can create inbox configs" ON public.email_inbox_configs FOR INSERT TO authenticated WITH CHECK ( public.has_role(auth.uid(), 'admin'::public.app_role) OR public.has_role(auth.uid(), 'manager'::public.app_role) ); CREATE POLICY "Staff can update inbox configs" ON public.email_inbox_configs FOR UPDATE TO authenticated USING ( public.has_role(auth.uid(), 'admin'::public.app_role) OR public.has_role(auth.uid(), 'manager'::public.app_role) ) WITH CHECK ( public.has_role(auth.uid(), 'admin'::public.app_role) OR public.has_role(auth.uid(), 'manager'::public.app_role) ); CREATE POLICY "Staff can delete inbox configs" ON public.email_inbox_configs FOR DELETE TO authenticated USING ( public.has_role(auth.uid(), 'admin'::public.app_role) OR public.has_role(auth.uid(), 'manager'::public.app_role) ); CREATE TRIGGER update_email_inbox_configs_updated_at BEFORE UPDATE ON public.email_inbox_configs FOR EACH ROW EXECUTE FUNCTION public.update_updated_at_column();