-- Pro Mitarbeiter darf maximal eine Stelle als primary markiert sein.
-- ====================================================================
-- bisher: position_assignments.is_primary konnte mehrfach true sein —
-- ein Mitarbeiter hatte dann widersprüchliche "Hauptstellen". Im UI
-- wurde immer die zuletzt gefundene gewonnen, was inkonsistent war.
--
-- Schritt 1: bestehende Mehrfach-Primaries bereinigen — pro Mitarbeiter
-- bleibt die mit jüngstem valid_from primary, alle anderen werden auf
-- false gesetzt.
--
-- Schritt 2: partial unique index (employee_id) where is_primary = true
-- verhindert künftige Mehrfach-Primaries auf DB-Ebene.

with ranked as (
  select id,
         row_number() over (
           partition by employee_id
           order by valid_from desc, created_at desc
         ) as rn
  from public.position_assignments
  where is_primary = true
)
update public.position_assignments pa
  set is_primary = false
  from ranked r
  where pa.id = r.id and r.rn > 1;

create unique index if not exists position_assignments_one_primary_per_employee
  on public.position_assignments (employee_id)
  where is_primary = true;
