-- Self-Service-Portal: Magic-Link-Auth für Mitarbeiter.
-- ====================================================================
-- Zweck: Mitarbeiter pflegen Foto, Mobil- & Social-Links eigenständig,
-- ohne Admin-Login. Auth läuft über Magic-Link an die Dienst-E-Mail.
--
-- Flow:
-- 1. MA gibt seine Dienst-E-Mail auf /portal ein.
-- 2. Server findet Mitarbeiter, erzeugt Token (24 Zeichen URL-safe),
--    schreibt Zeile in magic_link_tokens, sendet Mail mit
--    https://team.stwhas.de/portal/auth/<token>.
-- 3. MA klickt Link → Token wird konsumiert (used_at gesetzt) →
--    portal_session-Cookie gesetzt → Redirect /portal/edit.
-- 4. Auf /portal/edit darf MA nur das eigene Profil bearbeiten,
--    nur die im Form sichtbaren Felder (siehe portal/edit/actions.ts).
--
-- Sicherheit:
-- - Token gültig 30 Min, einmalig konsumierbar.
-- - Bei Verdachts-Re-Use des Tokens (used_at != null und erneut
--   abgerufen) → Login verweigert + Audit-Log-Eintrag.
-- - Tabelle ist anon-blockiert (RLS), nur Service-Role greift zu.

create table if not exists public.magic_link_tokens (
  id            uuid primary key default gen_random_uuid(),
  employee_id   uuid not null references public.employees(id) on delete cascade,
  token         text not null unique,
  expires_at    timestamptz not null,
  used_at       timestamptz,
  created_at    timestamptz not null default now(),
  ip            text
);

create index if not exists magic_link_tokens_token_idx
  on public.magic_link_tokens (token);

create index if not exists magic_link_tokens_employee_idx
  on public.magic_link_tokens (employee_id, created_at desc);

alter table public.magic_link_tokens enable row level security;
-- Keine Policy → anon hat keinen Zugriff. Service-Role umgeht RLS.
