-- L'IDENTITE DE LA CONCIERGERIE : ce qu'un editeur doit savoir de son client.
--
-- La migration 034 a cree l'entite pour qu'elle puisse SOUSCRIRE. Elle ne portait donc qu'un nom.
-- Un editeur qui gere ses conciergeries a besoin de les joindre, de les facturer, et de les
-- reconnaitre dans une liste de cent : c'est ce que ces colonnes ajoutent.
--
-- ================================================================================
-- TOUT EST NULLABLE, ET CE N'EST PAS UN RELACHEMENT
-- ================================================================================
--
-- Une conciergerie se cree en un champ — son nom — puis on la rattache a ses concierges et on
-- souscrit. Exiger l'adresse et le SIRET a la creation obligerait a les avoir sous la main au
-- moment ou l'on veut juste ouvrir un acces, et l'on saisirait n'importe quoi pour passer.
--
-- LA CONSEQUENCE EST ASSUMEE : une fiche incomplete existe, et l'ecran doit la montrer comme
-- telle plutot que de laisser des trous. C'est le meme choix que pour les coordonnees d'un
-- client, et la meme regle d'affichage — une absence se DIT.

ALTER TABLE conciergeries
    -- L'adresse de l'ETABLISSEMENT, celle qui figurera sur une facture. En trois colonnes et
    -- non en un bloc de texte : c'est la ville qu'on filtre dans une liste, et un champ libre
    -- ne se filtre pas.
    ADD COLUMN adresse           VARCHAR(200) NULL AFTER nom,
    ADD COLUMN code_postal       VARCHAR(10)  NULL AFTER adresse,
    ADD COLUMN ville             VARCHAR(120) NULL AFTER code_postal,

    -- ============================================================================
    -- LE SIRET : QUATORZE CHIFFRES, ET UNE COLONNE DE TEXTE
    -- ============================================================================
    --
    -- VARCHAR ET NON UN ENTIER, et c'est une erreur classique qu'il vaut la peine de nommer :
    -- un SIRET peut commencer par zero, et BIGINT le perdrait silencieusement. « 01234567800012 »
    -- deviendrait « 1234567800012 » — treize chiffres, donc un SIRET invalide que plus personne
    -- ne saurait reparer faute de savoir ce qui manque.
    --
    -- Aucune contrainte de longueur en base : la validation vit dans le domaine, ou elle peut
    -- rendre un message en francais. Un CHECK viole leve une exception PDO, donc une page 500
    -- sur une faute de frappe.
    ADD COLUMN siret             VARCHAR(14)  NULL AFTER ville,

    -- Les coordonnees de l'ENTREPRISE : la boite aux lettres generique, le standard.
    ADD COLUMN email             VARCHAR(190) NULL AFTER siret,
    ADD COLUMN telephone         VARCHAR(30)  NULL AFTER email,

    -- ============================================================================
    -- LE CONTACT : UNE PERSONNE, ET NON UN COMPTE
    -- ============================================================================
    --
    -- POURQUOI CE N'EST PAS UN utilisateurs.id. L'interlocuteur commercial n'est pas forcement
    -- quelqu'un qui se connecte : c'est souvent le gerant, ou un cabinet comptable, qui n'ont
    -- aucun compte et n'en auront jamais. Le lier a un compte obligerait a en ouvrir un pour
    -- pouvoir noter un numero de telephone.
    --
    -- C'est exactement la lecon de la migration 025 sur les clients : un interlocuteur
    -- commercial et un acces de connexion sont deux choses, et les confondre a coute une
    -- refonte.
    ADD COLUMN contact_nom       VARCHAR(120) NULL AFTER telephone,
    ADD COLUMN contact_email     VARCHAR(190) NULL AFTER contact_nom,
    ADD COLUMN contact_telephone VARCHAR(30)  NULL AFTER contact_email,

    -- Le filtre par ville de la liste, et le tri qui l'accompagne.
    ADD KEY idx_conciergeries_ville (ville, nom),

    -- ============================================================================
    -- LE SIRET EST UNIQUE, ET LES NULL NE S'EN OFFUSQUENT PAS
    -- ============================================================================
    --
    -- MySQL autorise autant de NULL qu'on veut dans un index UNIQUE : les fiches incompletes
    -- coexistent donc sans probleme, et deux conciergeries qui porteraient le MEME SIRET sont
    -- refusees. C'est le seul garde-fou qui attrape la saisie en double d'une meme entreprise —
    -- deux dossiers pour un client, deux abonnements, deux facturations.
    ADD UNIQUE KEY uq_conciergeries_siret (siret);
