Co-authored-by: renee-png <262607627+renee-png@users.noreply.github.com>
This commit is contained in:
gpt-engineer-app[bot]
2026-04-18 01:16:25 +00:00
co-authored by renee-png
parent 0fa129c193
commit bba10d31ac
2 changed files with 159 additions and 0 deletions
@@ -0,0 +1,60 @@
-- Calendar events table
CREATE TABLE IF NOT EXISTS public.events (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
case_id uuid REFERENCES public.cases(id) ON DELETE CASCADE,
client_id uuid REFERENCES public.clients(id) ON DELETE SET NULL,
title text NOT NULL,
description text,
location text,
start_at timestamptz NOT NULL,
end_at timestamptz,
all_day boolean NOT NULL DEFAULT false,
event_type text NOT NULL DEFAULT 'general',
external_id text,
created_by uuid,
created_at timestamptz NOT NULL DEFAULT now(),
updated_at timestamptz NOT NULL DEFAULT now()
);
CREATE UNIQUE INDEX IF NOT EXISTS events_external_id_uidx ON public.events(external_id) WHERE external_id IS NOT NULL;
CREATE INDEX IF NOT EXISTS events_case_id_idx ON public.events(case_id);
CREATE INDEX IF NOT EXISTS events_start_at_idx ON public.events(start_at);
ALTER TABLE public.events ENABLE ROW LEVEL SECURITY;
CREATE POLICY "events_select" ON public.events FOR SELECT TO authenticated
USING (case_id IS NULL OR public.can_access_case(case_id, auth.uid()) OR public.is_admin(auth.uid()));
CREATE POLICY "events_insert" ON public.events FOR INSERT TO authenticated
WITH CHECK (auth.uid() IS NOT NULL);
CREATE POLICY "events_update" ON public.events FOR UPDATE TO authenticated
USING (public.is_admin(auth.uid()) OR created_by = auth.uid() OR (case_id IS NOT NULL AND public.can_access_case(case_id, auth.uid())));
CREATE POLICY "events_delete" ON public.events FOR DELETE TO authenticated
USING (public.is_admin(auth.uid()) OR created_by = auth.uid());
CREATE TRIGGER events_set_updated_at BEFORE UPDATE ON public.events
FOR EACH ROW EXECUTE FUNCTION public.tg_set_updated_at();
-- Add external_id to common imported tables for idempotent re-imports
ALTER TABLE public.cases ADD COLUMN IF NOT EXISTS external_id text;
ALTER TABLE public.clients ADD COLUMN IF NOT EXISTS external_id text;
ALTER TABLE public.contacts ADD COLUMN IF NOT EXISTS external_id text;
ALTER TABLE public.homeowners ADD COLUMN IF NOT EXISTS external_id text;
ALTER TABLE public.tasks ADD COLUMN IF NOT EXISTS external_id text;
ALTER TABLE public.invoices ADD COLUMN IF NOT EXISTS external_id text;
ALTER TABLE public.expenses ADD COLUMN IF NOT EXISTS external_id text;
ALTER TABLE public.time_entries ADD COLUMN IF NOT EXISTS external_id text;
ALTER TABLE public.call_logs ADD COLUMN IF NOT EXISTS external_id text;
ALTER TABLE public.documents ADD COLUMN IF NOT EXISTS external_id text;
ALTER TABLE public.status_updates ADD COLUMN IF NOT EXISTS external_id text;
CREATE UNIQUE INDEX IF NOT EXISTS cases_external_id_uidx ON public.cases(external_id) WHERE external_id IS NOT NULL;
CREATE UNIQUE INDEX IF NOT EXISTS clients_external_id_uidx ON public.clients(external_id) WHERE external_id IS NOT NULL;
CREATE UNIQUE INDEX IF NOT EXISTS contacts_external_id_uidx ON public.contacts(external_id) WHERE external_id IS NOT NULL;
CREATE UNIQUE INDEX IF NOT EXISTS homeowners_external_id_uidx ON public.homeowners(external_id) WHERE external_id IS NOT NULL;
CREATE UNIQUE INDEX IF NOT EXISTS tasks_external_id_uidx ON public.tasks(external_id) WHERE external_id IS NOT NULL;
CREATE UNIQUE INDEX IF NOT EXISTS invoices_external_id_uidx ON public.invoices(external_id) WHERE external_id IS NOT NULL;
CREATE UNIQUE INDEX IF NOT EXISTS expenses_external_id_uidx ON public.expenses(external_id) WHERE external_id IS NOT NULL;
CREATE UNIQUE INDEX IF NOT EXISTS time_entries_external_id_uidx ON public.time_entries(external_id) WHERE external_id IS NOT NULL;
CREATE UNIQUE INDEX IF NOT EXISTS call_logs_external_id_uidx ON public.call_logs(external_id) WHERE external_id IS NOT NULL;
CREATE UNIQUE INDEX IF NOT EXISTS documents_external_id_uidx ON public.documents(external_id) WHERE external_id IS NOT NULL;
CREATE UNIQUE INDEX IF NOT EXISTS status_updates_external_id_uidx ON public.status_updates(external_id) WHERE external_id IS NOT NULL;