forked from wangziqi/gongxue-base
feat: notify tenants about public bank syncs
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
create table if not exists public.tenant_content_notifications (
|
||||
id uuid primary key default gen_random_uuid(),
|
||||
tenant_id uuid not null references public.tenants(id) on delete cascade,
|
||||
notification_type text not null
|
||||
check (notification_type in (
|
||||
'public_question_bank_synced',
|
||||
'public_question_bank_conflict'
|
||||
)),
|
||||
status text not null default 'unread'
|
||||
check (status in ('unread', 'read', 'dismissed', 'resolved')),
|
||||
severity text not null default 'info'
|
||||
check (severity in ('info', 'success', 'warning', 'error')),
|
||||
adoption_id uuid references public.tenant_question_bank_adoptions(id) on delete cascade,
|
||||
source_question_bank_id uuid references public.question_banks(id) on delete cascade,
|
||||
title text not null,
|
||||
message text not null,
|
||||
action_label text,
|
||||
action_path text,
|
||||
dedupe_key text,
|
||||
metadata jsonb not null default '{}'::jsonb,
|
||||
created_by uuid references public.platform_users(id) on delete set null,
|
||||
read_by uuid references public.platform_users(id) on delete set null,
|
||||
read_at timestamptz,
|
||||
resolved_at timestamptz,
|
||||
created_at timestamptz not null default now(),
|
||||
updated_at timestamptz not null default now()
|
||||
);
|
||||
|
||||
create unique index if not exists idx_tenant_content_notifications_dedupe
|
||||
on public.tenant_content_notifications(tenant_id, notification_type, dedupe_key)
|
||||
where dedupe_key is not null;
|
||||
|
||||
create index if not exists idx_tenant_content_notifications_tenant_status
|
||||
on public.tenant_content_notifications(tenant_id, status, created_at desc);
|
||||
|
||||
create index if not exists idx_tenant_content_notifications_adoption
|
||||
on public.tenant_content_notifications(tenant_id, adoption_id, notification_type, status);
|
||||
|
||||
alter table public.tenant_content_notifications enable row level security;
|
||||
|
||||
drop policy if exists tenant_content_notifications_isolation on public.tenant_content_notifications;
|
||||
create policy tenant_content_notifications_isolation on public.tenant_content_notifications
|
||||
for all
|
||||
using (tenant_id = app.current_tenant_id() or app.is_platform_admin())
|
||||
with check (tenant_id = app.current_tenant_id() or app.is_platform_admin());
|
||||
|
||||
drop trigger if exists set_updated_at on public.tenant_content_notifications;
|
||||
create trigger set_updated_at
|
||||
before update on public.tenant_content_notifications
|
||||
for each row execute function app.touch_updated_at();
|
||||
Reference in New Issue
Block a user