Aller au contenu

Validation du Schéma de Base de Données

Ce document décrit le processus de validation du schéma de base de données après l'exécution des migrations TypeORM.

Objectif

Le script de validation garantit que : 1. Tous les schemas PostgreSQL attendus existent 2. Toutes les tables avec leurs colonnes sont présentes 3. Tous les index requis sont créés 4. Tous les triggers sont actifs 5. Toutes les policies RLS sont en place

Usage

En local

npm run migration:validate

En CI/CD (après migrate:dev)

npm run migration:run && npm run migration:validate

Fichier de configuration

Le schéma attendu est défini dans src/database/schema-validator.ts via l'objet EXPECTED_SCHEMA.

Structure du schéma attendu

interface SchemaExpectation {
  schemas: string[];           // Schemas PostgreSQL
  tables: TableExpectation[];  // Tables avec colonnes
  indexes: IndexExpectation[]; // Index (BTREE, GIN, UNIQUE)
  triggers: TriggerExpectation[];   // Triggers
  rlsPolicies: RlsPolicyExpectation[]; // Policies RLS
}

Ajouter une nouvelle migration

Lors de la création d'une nouvelle migration, il faut :

  1. Mettre à jour schema-validator.ts avec les nouveaux objets créés
  2. Référencer le ticket (PD-XX) pour traçabilité

Exemple : Ajout d'une nouvelle table

// Dans EXPECTED_SCHEMA.tables
{
  schema: 'vault_secure',
  name: 'ma_nouvelle_table',
  columns: ['id', 'user_id', 'data', 'created_at'],
  migration: 'PD-XX',
}

// Dans EXPECTED_SCHEMA.indexes
{
  schema: 'vault_secure',
  table: 'ma_nouvelle_table',
  name: 'idx_ma_nouvelle_table_user_id',
  migration: 'PD-XX',
}

Comportement en cas d'erreur

Type d'objet Niveau Action
Schema manquant ERROR Exit code 1
Table manquante ERROR Exit code 1
Colonne manquante ERROR Exit code 1
Index manquant WARNING Log uniquement
Trigger manquant ERROR Exit code 1
Policy RLS manquante ERROR Exit code 1

Les index sont en WARNING car ils n'empêchent pas le fonctionnement (mais dégradent les performances).

Schéma actuel

Schemas

  • audit - Logs d'audit (PD-14)
  • vault_secure - Données sensibles isolées (PD-35)

Tables principales

Schema Table Migration Description
audit events PD-14 Journal d'audit
vault_secure users PD-15 Utilisateurs SRP-6a
vault_secure documents PD-16 Documents chiffrés
vault_secure key_envelopes PD-35 Enveloppes de clés
vault_secure device_blacklist PD-35 Devices révoqués
public documents PD-38 Table legacy avec hash_doc

Policies RLS

Toutes les tables vault_secure ont des policies RLS basées sur current_setting('app.current_user_id').

Intégration CI/CD

Dans .gitlab-ci.yml, ajouter après le job de migration :

migrate:dev:
  script:
    - npm run migration:run
    - npm run migration:validate  # <-- Ajouter cette ligne

Maintenance

  • Mettre à jour EXPECTED_SCHEMA à chaque nouvelle migration
  • Exécuter npm run migration:validate en local avant de pusher
  • Le script échoue (exit 1) si des objets critiques manquent