Skip to content

Latest commit

 

History

History
234 lines (172 loc) · 9.49 KB

CONTRIBUTING.md

File metadata and controls

234 lines (172 loc) · 9.49 KB

pass-emploi-api

Le contexte

Composants

  • pass-emploi-auth : Keycloak

Services externes

  • SendInBlue (SIB) : Templates & Envois d'emails
  • pole-emploi.io : avoir les accès dashlane
  • api milo ? a-t-on besoin de quelque chose?
  • firebase ?

Base de données, seeding et migrations

  • Lancer les seeds :
yarn seed

Pour ajouter des seeds, il faut aller dans le dossier src/infrastructure/sequelize/seeders

  • Créer une migration :
npx sequelize-cli migration:generate --name nom-de-la-migration
  • Lancer les migrations
    npx sequelize-cli db:migrate
  • Rollback la dernière migration
    npx sequelize-cli db:migrate:undo

Création d'un compte jeune de recette

xxx = staging | prod

  1. Créer une entrée jeune en base de données (pa-back-xxx)
    • structure : PASS_EMPLOI
    • type : JEUNE
    • date_creation : maintenant
    • id_conseiller : sur staging -> "41" Nils conseiller standard ou "1" MALEK MALEK superviseur
    • id et id_authentification : identiques (nom d'utilisateur à la connexion)
    • email : une consultée pour les fonctionnalités avec envoi d'email
  2. Créer une entrée Keycloak (pa-auth-xxx)
    • Récupérer les identifiants de connexion admin sur les variables d'environnement (staging : pa-auth-staging, prod : Dashlane)
    • Se connecter au Keycloak
    • Users -> Add User -> rentrer les informations
    • Sélectionner l'utilisateur créé -> Attributes -> Add -> id_user :
    • Credentials -> Reset Password -> Temporary Off
  3. Création d'une collection Firebase pour la messagerie

L'architecture

L'historique des décisions est consultable dans le dossier decisions

Flux des Commands / Queries

Flux des notifications push

Excalidraw

Les jobs et les crons

Excalidraw

Ne pas oublier, une fois la fonctionnalité merged, de lancer la task yarn initialiser-les-crons (à faire en recette et en prod)

Tests

Le runner de test est mocha, avec chai pour les assertions et sinon pour les mocks/stubs

  • Controllers
    • On utilise l'utilitaire TestingModuleBuilder de NestJS pour monter l'application afin de tester les routes.
  • Intégration avec la base de données
    • Lors du lancement des tests avec les bases de données PostgreSql et Redis, des images docker sont lancées.
    • Après chaque test, les données sont remises à 0
    • Afin d'avoir accès aux DB durant les tests, il faut nommer le fichier de test *.db.test.ts

Les tests sans base de données sont lancés en parallèle pour aller plus vite, ceux ayant une adherence avec la base de données en série

Développement de l'API

Mode watch

  • Lancement en mode watch :
yarn watch

Consultez l'api sur : http://localhost:5000/documentation

Le mode permet de lancer l'API swagger en mode observation. On peut coder les fonctionnalités et requêter les modifications faites à l'API sans avoir à relancer l'application.

Présentation de la CI/CD staging

Tout le code doit être testé pour pouvoir être mergé.

  • hooks pre-commit
  • lint
  • tests
  • sécurité
  • review app

Tests unitaires et d'intégration automatisés

yarn test
  • Tests avec l'IDE :

Pour lancer les tests avec votre IDE favori, il est nécessaire de lancer d'abord une base de données via le docker compose.

yarn start:db:test

Ensuite on il faut exporter la variable DATABASE_URL.

export DATABASE_URL=postgresql://test:test@localhost:56432/test

Enfin on peut lancer les tests avec le script ci (qui ne lance pas de DB)

yarn test:ci

Tests fonctionnels et e2e non automatisés

  • Staging Web, test des fonctionnalités conseiller :

  • Staging App, test des fonctionnalités jeune :

    • Télécharger CEJ-staging sur firebase
    • création d'un compte jeune sur la BDD staging
  • Tests notifications push / email :

    • Reporter son pushToken de notre jeune staging sur un jeune de la bdd locale
    • Reporter son mail sur un conseiller de la bdd locale

Commits

Pairing & Reviews

Rebasing

Déploiement de l'API

Nous utilisons actuellement Scalingo comme hébergeur sur l'application Web. Il existe deux environnements : Staging & Prod

Configuration du compte scalingo

Seul un email beta.gouv est compatible avec la prod et la région secnum !

  1. Installer le cli scalingo
  2. Ajouter sa clé ssh sur scalingo
    1. User settings > pa-back-prod droits
  3. ajouter son compte à la région outscale-secnum (demande au chat support scalingo)
  4. (pour support prod) ajouter sur intellij les informations de connexion à la base de données

Environnement de staging

L'environnement de staging front correspond à l'application scalingo front pa-back-staging.

Cette application est branchée sur la branche develop du repo. À chaque nouveau commit sur cette branche, un déploiement automatique sera lancé sur l'application.

Il est également possible de déployer manuellement en allant sur pa-back-staging > Deploy > Manual deployments > Trigger deployment

Les review apps sont activés sur cet environnement. Donc, à chaque nouvelle PR sur develop, une application temporaire au nom pa-back-staging-pr[numéro de la PR sur github] sera automatiquement créée. Cette application sera automatiquement détruite au merge de la PR. Pour plus d'informations sur les review apps, vous pouvez voir la doc scalingo

Environnement de production

L'environnement de prod front correspond à l'application scalingo back pa-back-prod.

Cette application est branchée sur la branche master du repo. Le déploiement automatique est désactivé : il faut alors aller sur scalingo et suivre les étapes suivantes pa-back-prod > Deploy > Manual deployments > Trigger deployment

Les review apps ne sont pas activées sur la prod.

Processus de release

  1. Tagger la version sur le commit de develop que l'on veut déployer
  2. Faire une MR de develop vers master et merger
  3. Aller sur scalingo et déployer la version de master

Rollback

Il est possible de rollback une application Scalingo sur un tag donné (de la branche rattachée à l'application).

git remote add scalingo git@ssh.${MA_REGION}.scalingo.com:${MON_APPLICATION}.git
git push --force ${ID_COMMIT}:refs/heads/master

Lancer des tasks sur les environnements déployés

scalingo --region ${MA_REGION} -a ${MON_APPLICATION} run yarn tasks

Planifier le lancement d'un job sur les environnements déployés

scalingo --region ${MA_REGION} -a ${MON_APPLICATION} run IS_WEB=false IS_WORKER=false TASK_NAME=MAJ_CODES_EVENEMENTS TASK_DATE=2022-09-09T12:00:00+02:00 node dist/main

Style guide

Troubleshoot

Voir le fichier TROUBLESHOOT.md du même dossier.