Skip to content

Mapping des variables MVLS vers les entités DEMA1N

Version : 1.0
Dernière mise à jour : 12/12/2025

Vue d'ensemble

Ce document présente le mapping détaillé entre les variables MVLS d'un jeune et leur stockage dans les entités DEMA1N (Jeune et User).


Tableau de correspondance

Variable MVLS Entité Propriété TypeScript Colonne BDD Type
id Jeune id id bigint (Primary Key)
creation_date Jeune creationDate creation_date timestamp
status Jeune status status varchar(255)
status_update_date Jeune statusUpdateDate status_update_date timestamp
first_name Jeune firstName first_name varchar(255)
last_name User lastName last_name varchar(255)
city_code Jeune cityCode city_code varchar(255)
city_name Jeune cityName city_name varchar(255)
school_name Jeune schoolName school_name varchar(255)
academy Jeune academy academy varchar(255)
gender User gender gender varchar(255)
qpv Jeune qpv qpv boolean
school_cursus Jeune schoolCursus school_cursus varchar(255)
school_region Jeune schoolRegion school_region varchar(255)
domaine_souhaite Jeune externalInfos.domaines external_infos (JSON) json
school_department Jeune schoolDepartment school_department varchar(255)
formation_souhaitee Jeune externalInfos.formations external_infos (JSON) json
besoins Jeune besoins besoins json

Notes importantes

1. Relations entre entités

  • last_name et gender sont stockés dans l'entité User, qui est liée à Jeune via une relation @OneToOne (jeune.user).
  • Pour accéder à ces champs, il est nécessaire de charger la relation user lors de la requête.

2. Champs JSON dans externalInfos

Les variables suivantes sont stockées dans le champ JSON externalInfos de l'entité Jeune :

  • domaine_souhaiteJeune.externalInfos.domaines (tableau de strings)
  • formation_souhaiteeJeune.externalInfos.formations (tableau de strings)

3. Structure du champ besoins

Le champ besoins est un champ JSON dans Jeune avec la structure suivante :

besoins: { slug: string, subs: string[] }[] | null

Exemple :

[
  { "slug": "orientation", "subs": ["choix_metier", "parcours_etudes"] },
  { "slug": "confiance", "subs": [] }
]

Exemple d'accès dans le code TypeScript

Requête avec relations

import { JeuneRepository } from 'src/binomes/repositories/jeune.repository';

// Charger le jeune avec la relation User
const jeune = await jeuneRepository.findOne({
  where: { id: jeuneId },
  relations: ['user'] // Important pour accéder à User.lastName et User.gender
});

Accès aux champs

// Champs directs dans Jeune
const id = jeune.id;
const creationDate = jeune.creationDate;
const status = jeune.status;
const statusUpdateDate = jeune.statusUpdateDate;
const firstName = jeune.firstName;
const cityCode = jeune.cityCode;
const cityName = jeune.cityName;
const schoolName = jeune.schoolName;
const academy = jeune.academy;
const qpv = jeune.qpv;
const schoolCursus = jeune.schoolCursus;
const schoolRegion = jeune.schoolRegion;
const schoolDepartment = jeune.schoolDepartment;
const besoins = jeune.besoins;

// Champs via relation User
const lastName = jeune.user?.lastName;
const gender = jeune.user?.gender;

// Champs via externalInfos (JSON)
const domainesSouhaites = jeune.externalInfos?.domaines; // tableau de strings
const formationsSouhaitees = jeune.externalInfos?.formations; // tableau de strings

Exemple complet avec gestion des valeurs nulles

// Récupérer un jeune MVLS avec toutes ses données
const jeune = await jeuneRepository.findOne({
  where: { id: jeuneId },
  relations: ['user']
});

if (!jeune) {
  throw new Error('Jeune non trouvé');
}

// Construire un objet avec toutes les variables MVLS
const variablesMvls = {
  id: jeune.id,
  creation_date: jeune.creationDate,
  status: jeune.status,
  status_update_date: jeune.statusUpdateDate,
  first_name: jeune.firstName,
  last_name: jeune.user?.lastName || null,
  city_code: jeune.cityCode,
  city_name: jeune.cityName,
  school_name: jeune.schoolName,
  academy: jeune.academy,
  gender: jeune.user?.gender || null,
  qpv: jeune.qpv,
  school_cursus: jeune.schoolCursus,
  school_region: jeune.schoolRegion,
  domaine_souhaite: jeune.externalInfos?.domaines || null,
  school_department: jeune.schoolDepartment,
  formation_souhaitee: jeune.externalInfos?.formations || null,
  besoins: jeune.besoins
};

Références


Version du document : 1.0
Dernière mise à jour : 12/12/2025