Skip to content

paulburgun/sante-psy

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CI branche main : image

Lancer en prod

Ce repo contient tout ce qu'il faut pour tourner sur Scalingo. Il suffit de déployer la branche main sur votre instance Scalingo.

Le deploiement sur scalingo se base sur le fichier Procfile

$ npm start

Lancer ce site localement

Vous devez avoir npm et docker compose installés sur votre machine.

git clone https://github.com/betagouv/sante-psy
cd sante-psy
cp .env.sample .env # replace API_TOKEN from Demarches Simplifiees API
docker-compose up
# http://localhost:8080 is ready with some test data to plat with
# to access psy workspace with toy data use this email login@beta.gouv.fr
# to access psy workspace without data use this email empty@beta.gouv.fr
# all available emails are listed here /test/seed/fake_data.js
# http://localhost:8080/psychologue/login
# login emails are received here : http://localhost:1080/

Pour controler visuellement la base de données, nous conseillons :

Afficher des annonces

Pour afficher des annonces de service (maintenance, formulaire, ...), on utilise la variable d'environnement ANNOUNCEMENT (voir .env.sample ou le fichier docker-compose) qui peut être configurée sur l'hebergeur Scalingo. Elle permet d'afficher de l'HTML ou du texte.

Pour tester les évolutions de base de données

Créer un fichier de migration

$ npm run makeMigration migration-name

Importer des fausses données

Voir le fichier dans test/seed/fake_data.js qui va créer quelues psy, patients, et séances.

Pour l'exécuter:

$ npm run seed

Upload un fichier sur Scalingo

# ça va importer ton fichier sur la machine et te connecter
scalingo -app APP_NAME run --file <nom_de_ton_fichier> bash
> cp /tmp/uploads/<nom_de_ton_fichier> .

Ajout de la correspondance entre université et psychologues

node scripts/matchPsychologistsToUniversities.js
# handle special cases - need to update the confidential list inside "scripts/psyToUni.js" - @see support
node scripts/matchSpecialPsyToUniversities.js

Insérer les universités pour la production

Voir aussi le script "scaling-dev-seed.sh" lié à "scalingo.json" qui permet d'insérer ces données sur les reviews app lors de leur 1er deploiement.

node scripts/insertUniversities.js # Insert into universities tables
node scripts/insertEmailToUniversities.js test/seed/test-ssu-renew.csv # insert emails contacts from CSV files (need to ask support for rights)

Exécuter les migrations

# Supprimer les tables existantes
docker-compose down
# ou docker-compose rm -f # removes already existing containers https://docs.docker.com/compose/reference/rm/

# Les recréer
docker-compose up
> (...)
web_1  | Creating ds_api_cursor table
web_1  | Creating universities table
web_1  | Creating patients table
web_1  | Creating psychologists table
web_1  | Creating appointments table
Santé Psy Étudiants listening at http://localhost:8080

Les données

Pour afficher une liste de psychologues, nous importons les données venant de l'API démarches simplifiées (DS) dans la base de données Postgresql à l'aide d'un cron. Cela nous permet un meilleur taux de réponses et une maitrise en cas de pic de traffic.

L'API DS est appellée à intervalle regulier à l'aide d'un CRON pour mettre à jour la table PG psychologists et on stockera le dernier cursor qui correspond à la dernière page requête de l'API dans la table PG ds_api_cursor pour ne rappeller que les pages necessaires et limiter le nombre d'appel à l'API DS, ceci est fait à l'aide d'un cron.

Cependant, certaines données dans DS vont être modifiées au fil du temps, et il nous est donc obligatoire de mettre à jour toutes les données, dans ce cas là nous n'utilisons pas le cursor de l'API à l'aide d'un 2ème CRON moins fréquent.

API de démarches simplifiées :

Pour mettre à jour toutes les données venant de DS vers PG, un cron est lancé à intervalle régulier (voir la page containers de Scalingo) :

$ node ./cron_jobs/cron.js

Accès à postgres

Avec le scalingo CLI et le nom de l'app sur scalingo

$ scalingo -a APP_NAME pgsql-console

On peut insérer des données comme ceci :

INSERT INTO public.psychologists
("dossierNumber", adeli, "firstNames", "lastName", email, address, departement, region, phone, website, teleconsultation, description, languages, training, diploma, university, "declaredUniversityId", "createdAt", "updatedAt", archived, state, "personalEmail")
VALUES('77356ab0-349b-4980-899f-bad2ce87e2f1', 'adeli', 'firstname', 'lastname', 'publicemail@beta.gouv.fr', '', '', '', '', '', false, 'accfzfz', '', '[]', '', '', null, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, false, 'accepte', 'private.email@beta.gouv.fr');

Autre solution : utiliser le code Node au lieu de SQL.

$ scalingo -a APP_NAME run node

Puis une fois la console node ouverte :

const dbPsychologists = require('./db/psychologists')

let psy = { 'dossierNumber': '77356ab0-349b-4980-899f-bad2ce87e2f1', 'adeli': 123, firstNames: 'Stevie', 'lastName': 'Wonder', 'email': 'meetwithstevie@wonder.com', archived: true, state: 'accepte', personalEmail: 'stevie@wonder.com'}

dbPsychologists.savePsychologistInPG([psy])

Test

Pour utiliser le container Postgresql

# Start DB and build SQL tables
docker-compose -f docker-compose-only-db.yml up

# start tests
npm test

Lancer les tests sans le CSRF

Configurer la variable d'environnement USE_CSRF à "false"

USE_CSRF="false"

Tester uniquement un test

$ npm test -- --grep "should call batchInsert on PG"

Test du cron

docker-compose up -d
docker ps # get container name
docker exec -ti sante-psy_web_1 bash -c "node ./cron_jobs/cron.js"
> 🚀 The job "Import data from DS API to PG" is ON * * * * *
Started 1 cron jobs
(...)

Test sur la CI

Sur la CI de github (.github/workflows/nodejs.yml) on utilise docker-compose avec l'option --abort-on-container-exit pour lancer les tests dans le container de l'application et finir le container de PG une fois que les tests ont été exécutés.

Stops all containers if any container was stopped. Incompatible with --detach.

Code coverage

$ npm run coverage

Ensuite, visiter avec votre navigateur pour visualiser le dossier ./coverage :

  • $REPO_PATH/sante-psy/coverage/index.html

Les emails - serveur SMTP Maildev

Maildev est un serveur SMTP avec une interface web conçus pour le développement et les tests.

Sans docker: Une fois installé et lancé, il suffit de mettre la variable d'environnement MAIL_SERVICE à maildev pour l'utiliser. MAIL_USER et MAIL_PASS ne sont pas nécessaires.

Avec docker: ne pas préciser de MAIL_SERVICE, les bonnes variables d'environnement sont déjà précisées dans le docker-compose

Tous les emails envoyés par le code seront visibles depuis l'interface web de Maildev :

Lint

$ npm run lint

Pre-commit pre-push

  • Un commit va lancer le linter

En savoir plus : https: //github.com/typicode/husky/tree/master#install

Si vous rencontez des problèmes avec les git hooks

  • S'assurer que le dossier des hooks soit .git/hooks : git rev-parse --git-path hooks
  • Sinon utilisez cette commande git config core.hooksPath .git/hooks/

Variables d'environnement

Voir .env.sample pour la liste complète

Libraries

About

Accompagnement psychologique pour les étudiants

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 77.2%
  • EJS 22.3%
  • Other 0.5%