3a902e7138
Co-authored-by: Copilot <copilot@github.com>
67 lines
2.3 KiB
PL/PgSQL
67 lines
2.3 KiB
PL/PgSQL
-- 10-mietvertrag-workflow.sql
|
|
-- Document templates bucket, mietvertrag setting, and qualification webhook trigger.
|
|
|
|
-- 1. Storage bucket for admin-uploaded document templates (private, admin-only)
|
|
insert into storage.buckets (id, name, public, file_size_limit, allowed_mime_types)
|
|
values (
|
|
'document-templates',
|
|
'document-templates',
|
|
false,
|
|
20971520,
|
|
array['application/vnd.openxmlformats-officedocument.wordprocessingml.document']
|
|
)
|
|
on conflict (id) do nothing;
|
|
|
|
-- RLS: only authenticated (admin) can read/write document-templates
|
|
drop policy if exists "templates_admin_select" on storage.objects;
|
|
create policy "templates_admin_select"
|
|
on storage.objects for select to authenticated
|
|
using (bucket_id = 'document-templates');
|
|
|
|
drop policy if exists "templates_admin_insert" on storage.objects;
|
|
create policy "templates_admin_insert"
|
|
on storage.objects for insert to authenticated
|
|
with check (bucket_id = 'document-templates');
|
|
|
|
drop policy if exists "templates_admin_update" on storage.objects;
|
|
create policy "templates_admin_update"
|
|
on storage.objects for update to authenticated
|
|
using (bucket_id = 'document-templates');
|
|
|
|
-- 2. Site setting for Mietvertrag template (empty on startup)
|
|
insert into public.site_settings (key, value)
|
|
values ('mietvertrag_template_path', '')
|
|
on conflict (key) do nothing;
|
|
|
|
-- 3. Function to notify n8n when a lead is qualified (new sales order created)
|
|
-- n8n listens on the 'lead_qualified' channel via Postgres trigger.
|
|
create or replace function public.notify_lead_qualified()
|
|
returns trigger
|
|
language plpgsql
|
|
security definer
|
|
as $$
|
|
begin
|
|
perform pg_notify('lead_qualified', json_build_object(
|
|
'sales_order_id', NEW.id,
|
|
'customer_id', NEW.customer_id,
|
|
'lead_id', NEW.lead_id,
|
|
'order_number', NEW.order_number,
|
|
'total_eur', NEW.total_eur,
|
|
'deposit_eur', NEW.deposit_eur,
|
|
'date_from', NEW.date_from,
|
|
'date_to', NEW.date_to,
|
|
'vehicle_label', NEW.vehicle_label
|
|
)::text);
|
|
return NEW;
|
|
end;
|
|
$$;
|
|
|
|
-- Trigger on sales_orders insert (fires when qualify_lead creates the order)
|
|
drop trigger if exists trg_notify_lead_qualified on public.sales_orders;
|
|
create trigger trg_notify_lead_qualified
|
|
after insert on public.sales_orders
|
|
for each row
|
|
execute function public.notify_lead_qualified();
|
|
|
|
notify pgrst, 'reload schema';
|