-- Rattachement d'un prestataire ou d'un proprietaire a un concierge.
--
-- Une colonne sur utilisateurs plutot qu'une table de liaison : un prestataire
-- releve d'un seul concierge a la fois. Le jour ou il faudra en partager un
-- entre deux concierges, ce sera une table dediee et une nouvelle migration —
-- pas une seconde colonne.
--
-- concierge_id est DISTINCT de cree_par, et il ne faut pas les confondre :
--   cree_par     = qui a saisi la fiche, information d'audit, jamais modifiee ;
--   concierge_id = de qui elle releve aujourd'hui, information metier, que
--                  l'administrateur peut reaffecter.
-- Un administrateur peut donc creer un prestataire pour le compte d'un
-- concierge : cree_par vaut l'administrateur, concierge_id vaut le concierge.
--
-- NULL est permis : un prestataire non rattache reste visible aux
-- administrateurs, qui peuvent l'affecter ensuite. Le refuser interdirait de
-- creer le moindre prestataire avant d'avoir un concierge, et transformerait
-- une donnee manquante en blocage.
--
-- Pas de ON DELETE SET NULL sur cette cle, contrairement a cree_par et
-- revoque_par : MySQL refuse qu'une colonne portant une action referentielle
-- figure aussi dans une contrainte CHECK (erreur 3823). Il fallait donc choisir,
-- et RESTRICT — le comportement par defaut, obtenu en omettant la clause — est
-- ici le bon choix, pas un pis-aller :
--
--   * l'application ne supprime jamais un compte, elle le revoque. Une
--     suppression ne peut donc venir que d'une intervention manuelle en base ;
--   * dans ce cas, un refus explicite vaut mieux qu'un detachement silencieux.
--     Celui qui supprime un concierge doit d'abord reaffecter ses fiches, ce qui
--     l'oblige a decider ou elles vont plutot que de les laisser orphelines.
--
-- Si vous rajoutez ON DELETE SET NULL ici, la contrainte CHECK ci-dessous
-- deviendra impossible et cette migration cessera de passer.

ALTER TABLE utilisateurs
    ADD COLUMN concierge_id BIGINT UNSIGNED NULL AFTER role,
    ADD KEY idx_utilisateurs_concierge (concierge_id, role, actif),
    ADD CONSTRAINT fk_utilisateurs_concierge
        FOREIGN KEY (concierge_id) REFERENCES utilisateurs (id),
    ADD CONSTRAINT ck_utilisateurs_concierge_role
        CHECK (concierge_id IS NULL OR role IN ('prestataire','proprietaire'));
