Copiez et renommez les fichiers '.env.sample' en '.env' dans les dossiers :
- back
- database
Avec pnpm les nodes_modules sont liés avec des liens symboliques donc les chemins peuvent nécessiter une configuration manuelle.
Le chemin vers pnpm devrais être détecté automatiquement
Format du chemin (replacer la version du module): Prettier package: $ROOT_DIRECTORY\node_modules.pnpm\prettier@2.6.2\node_modules\prettier
Format du chemin (replacer la version du module): Eslint package: $ROOT_DIRECTORY\node_modules.pnpm\eslint@8.21.0\node_modules\eslint
Format répertoires de travail (Working directories) $ROOT_DIRECTORY_ABSOLUTE_PATH\back; $ROOT_DIRECTORY_ABSOLUTE_PATH\front; $ROOT_DIRECTORY_ABSOLUTE_PATH\shared; $ROOT_DIRECTORY_ABSOLUTE_PATH\libs;
Ports & adapters Ports are the interfaces Adapters contains the concrete implementations.
Nous utilisons PostgreSQL
Pour utiliser la DB postgres, il faut soit installer postgres sur sa machine, soit lancer postgres dans un container.
Extentions de postgresql actives :
Nous avons une configuration docker-compose qui monte :
- Une BDD postgres persistante.
- un utilitaire d'administration basique Adminer disponible en local sur https://localhost:8090 (Les configurations pour se connecter avec adminer peuvent être préchargés dans l'url en suivant le format suivant : http://localhost:8090/?pgsql=postgres&username=immersion&db=immersion-db)
A partir de la racine du projet.
pnpm database start
Démarre la base de donnée sur son dernier état persisté (vierge si non initialisé)
pnpm database start
pnpm database reset
Nous utilisons node-pg-migrate pour générer les fichiers de migration.
- la base doit être montée (conteneur up)
- Variable d'environnement DATABASE_URL doit être définie dans le .env du back : Node pg migrate utilise la variable d'environnement DATABASE_URL avec le format "postgresql://POSTGRES_USER:POSTGRES_PASSWORD@PG_HOST:PG_EXPOSED_PORT/POSTGRES_DB" Eg. pour déploiement local: DATABASE_URL="postgresql://immersion:pg_password@localhost:5432/immersion-db"
Node pg migrate charge automatiquement le .env si présent.
pnpm database migrate create a-new-migration-filename-suffix
pnpm database migrate up a-new-migration-filename-suffix
pnpm database migrate down
pnpm database migrate down 5
Des usages plus avancés peuvent être trouvés dans la documentation.
Husky configuration is in .husky | Documentation There is a script for each hook.
The pre-commit hook execute the lint-staged
script
The current configuration run the linter and prettier on 'staged' files (files where git has detected a modification)
The current configuration run
- pnpm prettier:check => Check prettier on all files
- eslint ./**/src/ => Check lint on all files in sources directories
- pnpm test => Run all tests not needing dependencies
docker run -it rcambonie/scalingo-cli:1.23.0 bash
L'api token se génére sur trouve sur (https://dashboard.scalingo.com/account/tokens):
scalingo login --api-token=TOKEN
scalingo --app immersion-facile addons
-
Add the workspace to the package.json
-
Modify as needed the project scripts (build, lint, prettier etc...)
-
If your projet is another one dependency register it in the target
package.json
dependencies eg : adding 'shared' to 'back'
"devDependencies": {
[...]
"shared": "workspace:shared",
- To have ide / type / imports completion add it to the
tsconfig
"path"
eg : adding 'shared' to 'back'
{
"compilerOptions": {
[...],
"paths": {
"shared/*": ["./../../shared/*"],
}
}
}
Register tsconfig that include the project lintable files into
En exemple nous allons ajouter une nouvelle tâche régulière "Envoyer les emails bilans"
Copier la tâche d'exemple task-exemple.scalingo.task et créer la votre task-assessment-emails
Copier le point d'entrée d'exemple exempleTask.ts et créer la votre assessmentEmailsTask
Copier le point d'entrée d'exemple exempleTask.ts et créer la votre assessmentEmailsTask
Rajoutez votre use case à la liste dans UseCases.ts.
Puis proposez une implémentation dans server.express eg
useCases: {
// [...]
sendEmailsWithAssessmentCreationLink: {
execute: async () => {
applicationLogger.log("info", "I should do something interesting");
};
}
}
Mettez à jours les variables d'environement de votre workflow :
application-name: "immersion-facile-staging" #l'application qui servira de base à l'execution de votre tâche
task: "node --experimental-specifier-resolution=node dist/adapters/primary/server/tasks/assessmentEmailsTask.js" #Pensez à mettre le nom de votre point d'entré transpilé
task-name: "Exemple de tâche régulière" #Le nom de votre tâche pour la notification d'execution
Le projet "Shared" est une librarie partagée entre les projets Plus d'information sur l'organisation et la mise en place du code partagé : Code bundling