Comprendre le dossier server
Le dossier server contient le server. Son point d'entrée est app.mjs. Le serveur est lancé depuis le fichier server/bin/www.mjs.
Database
Le server nécessite une db mongo. Exemple d'un docker-compose.yml pour un environnement de développement :
version: '3.1'
services:
mongo:
container_name: mongodb
image: mongo
restart: always
ports:
- "27017:27017"Mettre à jour la variable d'env de l'url mongo dans .env en fonction de l'implementation de la db, exemple :
MONGO_DB_URL=mongodb://localhost:27017/fasst-oav-oipLogique d'initialisation du server
Dans app.js :
- initialisation du server express
- initialisation de la connexion à la db mongo
- initialisation de la logique de session. Utilise le package npm express-session. À chaque nouvelle session, un cookie est généré et une nouvelle session est créée dans la collection sessions en db.
- initialisation de l'OIP Core
- initialisation des routes déclarées dans le fichier server/routes.mjs et le dossier server/routes/
- initialisation du server graphql depuis server/graphql/initGraphql.mjs
Configuration de l'OIP Core
Le fichier de configuration de l'OIP Core oip.config.mjs se trouve à la racine du projet.
import { viewIds, actionIds } from './views/ids.mjs';
import { pubsub } from './server/graphql/initGraphql.mjs';
export default {
debug: true,
database: {
url: process.env.MONGO_DB_URL
},
rabbitMQ: {
name: 'fasst-oip-core'
},
views: {
config: 'viewsConfig',
viewIds,
actionIds
},
pubsub
};
Voir la documentation de l'OIP Core pour plus de détails concernant sa configuration.
Layer graphql
Le dossier server/graphql contient la déclaration des types et des resolvers graphql.
Voir le fichier initGraphql.mjs pour la logique d'initialisation du server graphql.
Utilisez le package npm apollo-server-express.
Chaque resolver reçoit en paramètre un objet context qui contient :
{
// le current process résolu par l'OIP Core
process: Process;
// l'id de la session en cours lié au current process
sessionId: string;
}Le resolver graphql/resolver/ProcessResolver.mjs résout les queries et mutations liées au process. Elles font appel aux controllers de l'OIP Core pour get ou altérer les données au niveau de la collection processes en db.
Logique de process / session
req exposé par express contient un objet session et son id session.id.
Cet objet session est généré et set dans req grâce au middleware app.use(session(sess)) dans la fonction initApp() dans le fichier app.js.
Un second middleware dans le fichier server/routes.mjs set sessionId dans req.data à partir de req.session.id.
Enfin côté OIP Core, un middleware sur l'endpoint /graphql ajoute le process courant résolu également dans req.data. Voir le fichier src/routes/index.mjs de l'OIP Core.
Lors de l'initialisation de apolloServer, fichier graphql/initGraphql.mjs, le context graphql est alors défini grâce à req.data.sessionId et req.data.process.
Lancer le server en mode dev
$> yarn server:dev