Aller au contenu

SIRRAT — Modèle de données « couloir » (lane)

Réalise ADR-0019 (dimension couloir) et s'appuie sur ADR-0016 (environnements) et ADR-0017 (couloir). Migration : changes/018-sirrat-lane-dimension.yaml.

1. Modèle conceptuel

SirratProject  (client, scenario, internal_app, + operated_by, hosting, acceptance, owner_org)
  └── SirratLane  (project, env_code, lane_code)               ★ NOUVEAU
        ├── is_reference  (libellé fonctionnel — NE route PAS)
        ├── data_strategy (shared|schema|database) + data_source_ref/dataset_ref/reset/retention
        └── operated_by / hosting (hérités, surchargeables)
  └── SirratEnvironmentStack  (project, env_code, lane_code)   ← clé étendue
        └── SirratEnvironmentSlotValue (slot = variable de config)
  └── Deployment  (project, env, lane_code, app_code, version) ← dimensions ajoutées

Concepts hors domaine (projections calculées par EnvironmentManifestService, jamais des entités) : Cluster, Namespace (= {env}-{app}-{lane}), Canal.

2. Ce que la migration 018 fait (rétro-compatible)

Changeset Effet
018-1 Crée sirrat_environment_lane + unique (project, env, lane) + index partiel un seul is_reference par (projet, env) + check lane_code <> 'preprod'.
018-2 sirrat_environment_stack : + lane_code (NOT NULL, défaut ref) ; remplace uk_environment_stack_project_env par uk_environment_stack_project_env_lane.
018-3 sirrat_deployments : + lane_code (défaut ref), + app_code ; index (project, env, lane).
018-4 sirrat_projects : + operated_by, hosting, acceptance, owner_org (attributs Centre de Services).

Les lignes existantes basculent toutes en lane_code = 'ref'aucune rupture.

3. Amendements de code à livrer DANS LE MÊME PALIER que la migration

Non appliqués hors-bande pour ne pas casser ddl-auto: validate. À faire ensemble (backlog SIR-2).

SirratEnvironment.java — ajouter INT, réserver PREPROD, alias déterministes :

INT("int", "🧪 INT — Intégration & qualification"),
// PREPROD réservé (non émis tant que l'env n'existe pas)
// fromCode : recette|staging|rmoa_dynors|rmoa_client -> RMOA   (jamais -> INT)

SirratEnvironmentStack.java — ajouter le champ mappé lane_code et étendre la clé :

@Column(name = "lane_code", nullable = false, length = 16)
private String laneCode = "ref";
// @UniqueConstraint -> {"project_db_id","env_code","lane_code"} (uk_environment_stack_project_env_lane)

Deployment.java — ajouter laneCode (défaut ref) et appCode.

SirratProject.java — ajouter operatedBy, hosting, acceptance, ownerOrg.

Nouveau : SirratLaneRepository + service de résolution refusant toute opération sans lane_code explicite (jamais de repli sur is_reference).

4. Règles d'intégrité (à faire respecter techniquement)

  1. lane_code^[a-z][a-z0-9-]{1,15}$ ; preprod interdit (check SQL + validation applicative).
  2. Au plus un is_reference = true par (project, env) (index partiel unique).
  3. is_reference ne résout jamais une URL/route incomplète (ADR-0017) — contrôle au niveau SLY + Gate 0.
  4. data_strategy = database|schemadata_source_ref requis (validation applicative).
  5. Environnement possédé par le clientowner_org + hosting=client ; ce n'est pas un couloir DYNORS (ADR-0019).