Lancement du projet
Vue d'ensemble
Un OAV en cours de développement mobilise trois éléments qui se démarrent séparément :
- les services annexes, orchestrés par Docker Compose ;
- l'application Express, qui porte la logique et l'accÚs aux données ;
- l'application React, servie par Vite.
Cette page décrit leur mise en route, dans l'ordre, puis le décrochage sur le parcours.
flowchart LR
A[docker compose up -d] --> B[Implementation of the handoff]
B --> C[npm run start-server:dev]
C --> D[npm run front:dev]
D --> E[Handoff on the OAV]Démarrage des services annexes
docker compose up -dCette commande démarre l'ensemble des services nécessaires à l'exécution de l'OAV :
Service | RĂŽle |
|---|---|
OIP Headless | Persistance, historisation, ordonnancement des tĂąches et rĂšgles RGPD. |
Fasst Sessions | Ămission et validation des jetons de dĂ©crochage. |
PostgreSQL | Base de données d'OIP Headless et magasin des sessions de l'OAV. |
RabbitMQ | Acheminement des évÚnements entre OIP Headless et l'OAV. |
Vérifiez que les conteneurs sont démarrés :
docker compose psImplémentation du décrochage
Fonction | RĂŽle | Valeur de retour |
|---|---|---|
resolveProjectFromContext | Résout le projet associé au contexte client, et le crée s'il n'existe pas. | Identifiant de l'entité Project. |
validateProjectId | Valide un projectId passé en paramÚtre d'URL. | Booléen. |
resolveFirstView | Détermine la vue d'entrée du parcours. | Identifiant de vue. |
Exemple d'implĂ©mentation â server/index.mjs
import { logger } from '@fasstech/logger';
import { getEnv, handleTask, start as startServer } from '@fasstech/oip-starter-utils/server';
import { queueService } from '@fasstech/rabbitmq-helper';
import { $Project, getProjectId, setProjectExternalId, updateProject } from '../entities/Project/index.mjs';
import { ExtendedProcessType } from './graphql/types/extended-process-type.mjs';
import { extendProcess } from './process/extend-process.mjs';
let serverConfig = {
logger,
graphql: { typeDefs: [ExtendedProcessType] },
process: {
resolveFirstView: async () => {
return Promise.resolve('home');
},
extendWith: extendProcess
},
session: {
validateProjectId: async ({ projectId }) => {
const project = await $Project(projectId);
return project != null;
},
resolveProjectFromContext: async (args) => {
let externalId;
if (getEnv('SECURE_SESSION')) {
externalId = args.externalId;
} else {
const { getMockContext } = await import('../mocks/context.mjs');
externalId = getMockContext().externalId;
}
let project = await $Project({ externalId });
if (project == null) {
project = await $Project();
if (externalId != null) project = setProjectExternalId(externalId, project);
project = await updateProject(project);
}
return getProjectId(project);
}
}
};
await startServer(serverConfig);
// Register a consumer to handle `events` messages
queueService.consumeMessage(`${getEnv('OAV_ID')}.events`, 0, handleTask);Dans cet exemple :
- lorsque SECURE_SESSION vaut true, le contexte client résolu par Fasst Sessions est consommé pour en extraire l'externalId ;
- sinon, un contexte simulé (mocks/context.mjs) est utilisé, ce qui permet de décrocher sans jeton en développement ;
- le projet est récupéré s'il existe, créé sinon ;
- le consommateur AMQP est enregistré pour recevoir les évÚnements de tùches.
Démarrage de la partie serveur
npm run start-server:devCette commande applique les migrations en attente (migrate:dev) puis démarre l'application Express (server:dev), qui lit ses variables depuis le fichier .env.
Démarrage de la partie client
npm run front:devCette commande démarre le serveur de développement Vite. Par défaut, le client est servi sur le port 8000.
Décrochage sur l'OAV
Le décrochage est la phase d'entrée dans le parcours : le contexte client est résolu, le projet est déterminé et la premiÚre vue est calculée.
Avec un jeton
Récupérez un jeton d'authentification auprÚs du service Fasst Sessions :
curl --request POST \
--url http://localhost:3005/api/sessions/tokens \
--header 'Content-Type: application/json' \
--data '{"applicant":"magic","metadata":{"externalId":"project-AAA"}}'L'application est alors accessible Ă l'adresse :
http://localhost:8000/?token=<GENERATED_TOKEN>Les métadonnées transmises lors de la génération du jeton constituent le contexte client : elles sont restituées à la fonction resolveProjectFromContext.
Sans jeton
En développement, définir SECURE_SESSION=false dans le fichier .env désactive la résolution du contexte auprÚs de Fasst Sessions. L'application est alors accessible directement :
http://localhost:8000/Dans ce mode dégradé, le contexte client est simulé dans le corps de la fonction resolveProjectFromContext.
Ports utilisés
ĂlĂ©ment | Port par dĂ©faut |
|---|---|
Client Vite | 8000 |
Serveur Express | Valeur de la variable PORT. |
Fasst Sessions | 3005 |
PostgreSQL | 5432 |
OIP Headless | Défini par la variable OIP_API_URL. |
Pour aller plus loin
Section | Contenu |
|---|---|
ContrÎle du bon fonctionnement de l'installation et résolution des erreurs courantes. | |
Arborescence, nommage et traitement du code généré. | |
Procédures pas à pas, orientées tùche. | |
Scénarios complets combinant plusieurs mécanismes. |
Résumé
- Les services annexes se démarrent avec docker compose up -d ;
- les trois fonctions de dĂ©crochage doivent ĂȘtre implĂ©mentĂ©es dans server/index.mjs avant tout dĂ©marrage du serveur ;
- npm run start-server:dev applique les migrations puis démarre l'application Express, npm run front:dev démarre le client ;
- le décrochage s'effectue avec un jeton émis par Fasst Sessions, ou sans jeton lorsque SECURE_SESSION=false en développement.