Santé Psy | https://santepsyetudiants.beta.gouv.fr/
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
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 :
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.
$ npm run makeMigration migration-name
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
# ç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> .
node scripts/matchPsychologistsToUniversities.js
# handle special cases - need to update the confidential list inside "scripts/psyToUni.js" - @see support
node scripts/matchSpecialPsyToUniversities.js
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)
# 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
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 :
- Documentation : https://doc.demarches-simplifiees.fr/pour-aller-plus-loin/graphql
- Schema: https://demarches-simplifiees-graphql.netlify.app/query.doc.html
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
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])
Pour utiliser le container Postgresql
# Start DB and build SQL tables
docker-compose -f docker-compose-only-db.yml up
# start tests
npm test
Configurer la variable d'environnement USE_CSRF à "false"
USE_CSRF="false"
$ npm test -- --grep "should call batchInsert on PG"
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
(...)
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.
$ npm run coverage
Ensuite, visiter avec votre navigateur pour visualiser le dossier ./coverage
:
- $REPO_PATH/sante-psy/coverage/index.html
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 :
$ npm run lint
- 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/
Voir .env.sample
pour la liste complète
- https://github.com/prisma-labs/graphql-request
-
http://tabulator.info/
Tester les fonctions privées :
- https://github.com/jhnns/rewire
- CSRF tokens : https://github.com/pillarjs/understanding-csrf#csrf-tokens