Notes Importantes
-
Soft Delete : Toutes les entités héritent de
BaseEntityqui inclut un champdeletedAtpour la suppression logique. -
Indexation : La plupart des champs importants sont indexés pour optimiser les performances de recherche.
-
Relations : Les relations entre entités sont bien définies avec des contraintes de clés étrangères.
-
Sécurité : Certains champs sensibles (mots de passe, tokens) sont marqués avec
select: falsepour éviter leur exposition accidentelle. -
JSONB : Plusieurs champs utilisent le type
jsonbpour stocker des données structurées flexibles. -
Enums : De nombreux champs utilisent des énumérations pour garantir la cohérence des données. Toutes les valeurs possibles sont documentées dans ce document.
-
Héritage : Toutes les entités héritent de
BaseEntityqui fournit les champs communs (id, timestamps, soft delete). -
Migration BigQuery : Les champs marqués avec des équivalences BigQuery proviennent de l'ancienne base de données et sont migrés via les scripts d'import.
-
Mapping des données : Certains champs nécessitent des transformations lors de la migration :
-
profile.gender→gender(mapping des valeurs françaises vers anglaises) profile.role→roles(conversion en tableau)services.password.bcrypt→passwordemails[0].verified→activatedprofile.lyceeStudies[0].filiere→filiere(premier élément du tableau)-
profile.studies[]→ multiplesparcoursEclaireur(un par étude) -
Champs JSON : Plusieurs champs sont stockés en JSONB et proviennent de champs JSON de BigQuery :
profile.environnement→environnementprofile.matieres→matieresprofile.lyceeStudies→lyceeStudiesalgoInput→surveyResultalgoResults→algoResult
-
Types de données PostgreSQL :
timestamptz: Timestamp avec timezone (utilisé pour createdAt, updatedAt, deletedAt)jsonb: Données JSON binaires (utilisé pour les champs flexibles)text: Texte de longueur variable illimitéevarchar(n): Chaîne de caractères de longueur maximale nboolean: Booléeninteger: Entierdate: Date (sans heure)
-
Valeurs par défaut : De nombreux champs ont des valeurs par défaut définies dans le code. Ces valeurs sont documentées dans ce document.
-
Propriétés virtuelles : Certaines entités ont des propriétés virtuelles (comme
fullnamedans User,addressdans MvlsLyceen) qui sont calculées à l'exécution et ne sont pas stockées en base de données.