feat: add shared notification, communication, and export services for bookings, courses, and events; introduce btree_gist extension and new booking atomic function
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* -------------------------------------------------------
|
||||
* Shared Communications Table for Courses, Events, Bookings
|
||||
* Tracks email, phone, letter, meeting, note, sms entries
|
||||
* -------------------------------------------------------
|
||||
*/
|
||||
|
||||
CREATE TABLE IF NOT EXISTS public.module_communications (
|
||||
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
account_id uuid NOT NULL REFERENCES public.accounts(id) ON DELETE CASCADE,
|
||||
module text NOT NULL CHECK (module IN ('courses', 'events', 'bookings')),
|
||||
entity_id uuid NOT NULL,
|
||||
type text NOT NULL DEFAULT 'note' CHECK (type IN ('email', 'phone', 'letter', 'meeting', 'note', 'sms')),
|
||||
direction text NOT NULL DEFAULT 'internal' CHECK (direction IN ('inbound', 'outbound', 'internal')),
|
||||
subject text,
|
||||
body text,
|
||||
email_to text,
|
||||
email_cc text,
|
||||
attachment_paths text[],
|
||||
created_by uuid REFERENCES auth.users(id) ON DELETE SET NULL,
|
||||
created_at timestamptz NOT NULL DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS ix_module_communications_entity
|
||||
ON public.module_communications(module, entity_id, created_at DESC);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS ix_module_communications_account
|
||||
ON public.module_communications(account_id, module, created_at DESC);
|
||||
|
||||
ALTER TABLE public.module_communications ENABLE ROW LEVEL SECURITY;
|
||||
REVOKE ALL ON public.module_communications FROM authenticated, service_role;
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE ON public.module_communications TO authenticated;
|
||||
GRANT ALL ON public.module_communications TO service_role;
|
||||
|
||||
CREATE POLICY module_communications_select ON public.module_communications
|
||||
FOR SELECT TO authenticated USING (public.has_role_on_account(account_id));
|
||||
|
||||
CREATE POLICY module_communications_mutate ON public.module_communications
|
||||
FOR ALL TO authenticated USING (public.has_role_on_account(account_id))
|
||||
WITH CHECK (public.has_role_on_account(account_id));
|
||||
Reference in New Issue
Block a user