Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migration des clients en base de donnée #48

Merged
merged 25 commits into from
Feb 22, 2023

Conversation

tmerlier
Copy link
Contributor

@tmerlier tmerlier commented Nov 4, 2022

Contexte

Les clients et leurs informations sont actuellement stockés dans un fichier clients.yml.

Évolutions

  • Le fichier clients.yml a été remplacé la collection mongo clients.
  • Le paramètre {clients} envoyé au serveur a été supprimé. Ce paramètre était utile aux tests unitaire, ce n'est plus nécessaire maintenant.
  • Le modèle habilitation et revision ne stock plus leur client sous forme d'objet, mais uniquement son _id

Routes

Toutes les routes /clients nécéssitent une authentification administrateur

/clients

  • Créer un client : POST /clients/
  • Récupérer un client : GET /clients/:clientId
  • Modifier un client : PUT /clients/:clientId

Modèles

Client

 {
  _id: '6051dae287088f21afd00c53', // Identifiant Mongo
  id: 'identifiant-nom-client', // Identifiant manuelle (legacy)
  mandataire: '7n51dae287088f21afd07c580', // Identifiant Mongo
  chefDeFile: '7501dae287088f21afd00b76', // Identifiant Mongo
  nom: 'Nom du client',
  active: true,
  token: 'xxxxxxxxxxxxxxxxxx',
  authorizationStrategy: 'habilitation' || 'chef-de-file' || 'internal',
  options: {
    relaxMode: false
  },
  _createdAt: '1970-01-01',
  _updatedAt: '1970-01-01',
}

Legacy

Afin d'éviter un "breaking change", deux comportements ont été gardé :

  • La propriété id qui était attribué manuellement à chaque client peut désormais être remplacé par l'identifiant mongo _id. Cependant, cet id sert toujours aux utilisateurs de l'API et doit donc être conservé. Les futurs clients ne disposeront alors pas de ce champ id.
  • L’objet client précédemment enregistré dans les modèles Revisions et Habilitation a été conservé plutôt que d'être remplacé par un simple _id. Celui-ci est restitué par la méthode Client.exposedFields() qui isole les champs déjà présents et qui peuvent être publique.

Migration

 ⚠️ La migration se base sur une version modifiée et complétée du fichier clients.yml existant. Cette nouvelle version devra remplacer l'existante en production avant de lancer la migration.

@tmerlier tmerlier added the enhancement New feature or request label Nov 4, 2022
@tmerlier tmerlier self-assigned this Nov 4, 2022
Copy link
Member

@jdesboeufs jdesboeufs left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

La fichier de migration n'a pas encore été revu de mon côté ⚠️

lib/util/middlewares.js Outdated Show resolved Hide resolved
lib/util/middlewares.js Outdated Show resolved Hide resolved
lib/clients/routes.js Outdated Show resolved Hide resolved
lib/clients/model.js Outdated Show resolved Hide resolved
lib/clients/model.js Outdated Show resolved Hide resolved
lib/clients/model.js Show resolved Hide resolved
lib/clients/model.js Show resolved Hide resolved
lib/clients/model.js Outdated Show resolved Hide resolved
lib/clients/model.js Outdated Show resolved Hide resolved
lib/clients/model.js Outdated Show resolved Hide resolved
lib/util/middlewares.js Outdated Show resolved Hide resolved
lib/util/middlewares.js Outdated Show resolved Hide resolved
lib/util/middlewares.js Outdated Show resolved Hide resolved
@tmerlier
Copy link
Contributor Author

Les derniers changements apportés sont concentrés sur l'utilisation des deux champs _id et id.

  • _id identifiant mongo
  • id identifiant attribué manuellement avant la sauvegarde en base de donnée des clients.

Le champ id ne sera donc plus attribué pour les futurs clients, mais restera conservé pour ceux qui le possèdent.

Pour les documents habilitations et revisions, le client n'est plus stocké sous forme d'objet, mais uniquement avec l'_id mongo.
Afin de ne pas casser le comportement initiale de l'API, la méthode computePublicClient a été ajoutée dans le but de récupérer un objet client identique à ce qui était précédemment envoyé (l'_id en plus).

@tmerlier
Copy link
Contributor Author

Le dernier commit ajout un script de migration dédié à la version de démonstration de l'API.

Ce script va, entre autres, s'occuper de créer un mandataire de démonstration sur lequel tous les clients seront rattachés.

lib/clients/__tests__/model.js Outdated Show resolved Hide resolved
lib/clients/model.js Show resolved Hide resolved
lib/clients/model.js Show resolved Hide resolved
lib/clients/model.js Show resolved Hide resolved
lib/revisions/model.js Show resolved Hide resolved
migrations/migration-clients-demo.js Outdated Show resolved Hide resolved
migrations/migration-clients-demo.js Outdated Show resolved Hide resolved
migrations/migration-clients-demo.js Show resolved Hide resolved
migrations/migration-clients-demo.js Outdated Show resolved Hide resolved
migrations/migration-clients-demo.js Outdated Show resolved Hide resolved
@tmerlier tmerlier force-pushed the tmerlier/clients-model-migration branch from ca7707c to ff288ab Compare February 1, 2023 10:17
jdesboeufs
jdesboeufs previously approved these changes Feb 1, 2023
@tmerlier tmerlier force-pushed the tmerlier/clients-model-migration branch from 4ef99bf to 4387b32 Compare February 22, 2023 09:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants