TeamVis Self-Host-Bundle v0.31.0
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
-- Lead-Capture: Empfänger einer Visitenkarte teilt seine eigenen
|
||||
-- Kontaktdaten zurück. Der Mitarbeiter sieht das im Admin-Backend.
|
||||
-- ====================================================================
|
||||
-- Privacy: keine PII über Trusted-Token, kein Cookie-Tracking.
|
||||
-- Lead wird mit der Karte verknüpft (employee_id) — der Mitarbeiter
|
||||
-- (oder Admin) sieht in seiner Detail-Page eine Liste der Leads.
|
||||
--
|
||||
-- Spam-Mitigation auf App-Ebene: Honeypot-Feld + Rate-Limit pro IP.
|
||||
-- Hier nur Datenmodell.
|
||||
|
||||
create table if not exists public.card_leads (
|
||||
id uuid primary key default gen_random_uuid(),
|
||||
employee_id uuid not null references public.employees(id) on delete cascade,
|
||||
-- Kontaktdaten der Person, die die Karte zurück geteilt hat:
|
||||
first_name text not null,
|
||||
last_name text not null,
|
||||
email text,
|
||||
phone text,
|
||||
company text,
|
||||
position text,
|
||||
message text,
|
||||
-- Metadata:
|
||||
created_at timestamptz not null default now(),
|
||||
source_url text, -- URL der Karte, von der aus geteilt wurde
|
||||
read_at timestamptz, -- "gelesen" markieren im Admin
|
||||
-- DSGVO: explizite Einwilligung muss true sein.
|
||||
consent_given boolean not null default false
|
||||
);
|
||||
|
||||
create index if not exists card_leads_employee_id_idx
|
||||
on public.card_leads (employee_id, created_at desc);
|
||||
|
||||
create index if not exists card_leads_unread_idx
|
||||
on public.card_leads (employee_id) where read_at is null;
|
||||
|
||||
alter table public.card_leads enable row level security;
|
||||
-- Service-Role-only — anon kann zwar inserten (über Server Action mit
|
||||
-- Service-Role), aber nicht lesen.
|
||||
Reference in New Issue
Block a user