-- Migration v2 routing Teams : multi-match (fan-out), serveurs DB, référents additionnels -- - teams_channel_rules.match_is_database_server : nouvelle condition (matcher uniquement les DB) -- - servers.is_database_server : flag manuel (default false) -- - server_additional_referents : table additive pour multi-référents par serveur (cas DB Nadine+Cedric) -- Le moteur de résolution passe en mode "toutes les règles qui matchent contribuent" (cf code service). -- Idempotent. -- ─── 1) Condition is_database_server sur les règles ─────────── ALTER TABLE public.teams_channel_rules ADD COLUMN IF NOT EXISTS match_is_database_server boolean; -- NULL = pas de filtre ; true = ne matcher que les DB ; false = ne matcher que les non-DB -- ─── 2) Flag is_database_server sur servers ─────────────────── ALTER TABLE public.servers ADD COLUMN IF NOT EXISTS is_database_server boolean NOT NULL DEFAULT false; CREATE INDEX IF NOT EXISTS idx_servers_is_db ON public.servers(is_database_server) WHERE is_database_server = true; -- ─── 3) Référents additionnels (multi-référents) ────────────── CREATE TABLE IF NOT EXISTS public.server_additional_referents ( server_id integer NOT NULL REFERENCES public.servers(id) ON DELETE CASCADE, contact_id integer NOT NULL REFERENCES public.contacts(id) ON DELETE CASCADE, role text NOT NULL DEFAULT 'referent_technique', -- 'referent_technique' (par défaut) | extensible (DBA, sécu, ...) created_at timestamptz NOT NULL DEFAULT now(), PRIMARY KEY (server_id, contact_id, role) ); CREATE INDEX IF NOT EXISTS idx_server_additional_referents_contact ON public.server_additional_referents(contact_id); -- ─── 4) GRANTs ──────────────────────────────────────────────── GRANT SELECT, INSERT, UPDATE, DELETE ON public.server_additional_referents TO patchcenter;