đ Guidelines de dĂ©veloppement OIP
đŻ Objectif
Pour faciliter les évolutions et les migrations de votre projet via les scripts de migration, il est important de respecter certaines bonnes pratiques.
Ces guidelines ont pour but de garantir :
- une structure de projet claire et homogĂšne
- une meilleure maintenabilité dans le temps
- des migrations simplifiées entre versions OIP
đ§± Structure du projet
Les dossiers principaux du projet sont :
- app â partie front-end (interface utilisateur)
- server â partie back-end (logique serveur)
Le fonctionnement standard de ces Ă©lĂ©ments est dĂ©jĂ pris en charge par la dĂ©pendance @fasstech/oip-starter-utils, maintenue par lâĂ©quipe OIP.
đ Important : Certains fichiers prĂ©sents dans ces dossiers sont essentiels au bon fonctionnement de lâapplication.
âĄïž Ne pas :
- supprimer ces fichiers
- les renommer
- modifier leur structure sans indication
Des commentaires dans le code vous guideront sur les zones modifiables.
đ§ Ce que vous pouvez adapter
Vous pouvez personnaliser votre projet, notamment :
- Les dossiers app et server (en respectant leur structure)
- La configuration des vues (viewsConfig)
- Les composants dâinterface (views/[view]/client)
- Les logiques serveur liées aux vues (views/[view]/server)
- Les logiques partagées (views/_common)
- Les fichiers de configuration (ex : vite.config.js)
âš Bonnes pratiques de code
Pour garantir un code lisible et maintenable :
- Utiliser des noms clairs et explicites
- Respecter les conventions :
- kebab-case â fichiers et dossiers
- camelCase â variables et fonctions
- PascalCase ou UPPER_SNAKE_CASE â constantes
đŠ Gestion des dĂ©pendances
Versions
Toujours utiliser des versions fixes dans le package.json :
"dependencies": {
"my-package": "1.0.0"
}â Ăviter les versions dynamiques (^1.0.0) qui peuvent crĂ©er des instabilitĂ©s.
Organisation
Pour optimiser la qualité et la taille de votre application :
- devDependencies â outils de dĂ©veloppement (frontend + backend)
- dependencies â uniquement ce qui est nĂ©cessaire en production
âïž Configuration du projet
Fichier de configuration OIP
đ Emplacement :
server/oip.config.mjs
Initialisation du serveur
Pour ajouter de la logique au démarrage :
đ Fichier :
import { Something } from 'something';
...
// init your business logic here
Something.start();Ajouter des routes ou API
đ Fichier :
import express from 'express';
const router = express.Router();
// a custom middleware on /api
router.use('/api', (req, res, next) => {
console.log('My beautiful API');
next();
});
// a custom endpoint on /api
router.get('/api/test', (req, res) => {
res.send({ message: 'Dans la vie, il y a des cactus!' })
});
export default router;â ïž Pensez Ă©galement Ă dĂ©clarer vos endpoints dans vite.config.js si nĂ©cessaire.
import { defineConfig, loadEnv } from 'vite';
export default defineConfig(({ mode }) => {
const env = loadEnv(mode, process.cwd(), '');
return {
...
server: {
port: 8000,
proxy: {
...
// custom endpoint /api
'/api': {
target: `http://localhost:${env.PORT}`,
changeOrigin: true
}
}
}
};
});đ§ Gestion des donnĂ©es (OIP)
â ïž RĂšgle essentielle
Toujours utiliser les getters et setters OIP pour lire et écrire les données.
â Exemple :
getCustomerFirstName(customer);
setCustomerFirstName('John', customer);â Interdit :
const lastName = customer.LastName;
customer.firstName = 'John';đ Pourquoi ? Sinon, si la donnĂ©e est chiffrĂ©e, elle ne sera pas dĂ©chiffrĂ©e sans passer par le getter; les scripts de migration ne fonctionneront pas correctement.
đ Initialisation du projet mĂ©tier
Lors de la récupération du contexte utilisateur (via token), vous pouvez :
- créer un projet
- initialiser ses données
đ Fichier :
import { Entities } from '@fasstech/oip-core';
export const initProjectFromContext = async (context) => {
// setup your init logic project here
const { externalId } = context;
let project = await Entities('Project').get({ externalId });
if (project) {
return project;
}
project = await Entities('Project').create({ externalId });
project = await Entities('Project').save(project);
return project;
};đ Extensions possibles
Vous pouvez étendre le framework OIP :
- Ajouter des handlers personnalisés
- Ătendre le process mĂ©tier
- Ajouter des types GraphQL
đ Pour ces cas, se rĂ©fĂ©rer Ă la documentation dĂ©diĂ©e.
đ Gestion du CORS
Le serveur autorise par défaut toutes les origines.
Vous pouvez restreindre cela en configurant :
đ server/index.mjs
Exemple :
corsOptions: {
origin: [...],
credentials: true
}đ Frontend sur un autre domaine (MFE)
Si votre front est hébergé ailleurs :
- Définir SERVER_URL cÎté frontend
- Configurer le CORS cÎté serveur
- Vérifier la gestion des sessions (cross-site)
đ§© Ă retenir
â Respecter la structure du projet â Ne pas modifier les fichiers critiques â Utiliser les outils fournis par OIP â Ăcrire un code simple et clair â Toujours passer par les getters/setters