Aller au contenu

Prise en main

Le backend SIM est une API NestJS 11 / TypeScript 5.7. Il attend une base PostgreSQL, Redis (optionnel en dev) et un runtime Node.js 22 compatible.

  • Node.js 22 LTS
  • pnpm 11.9+ (le projet utilise pnpm)
  • PostgreSQL 18 (ou le stack Docker local sim-database)
  • Redis 7 (optionnel en local ; un repli en mémoire est disponible)
  • MinIO ou S3 (optionnel en local ; les uploads utiliseront S3 en production)
sim-backend/
├── package.json
├── pnpm-workspace.yaml
├── nest-cli.json
├── tsconfig.json
├── tsconfig.build.json
├── Dockerfile
├── docker-compose.local.yml
├── docker-compose.dev.yml
├── docker-compose.prod.yml
├── docker-entrypoint.sh
├── scripts/
│ └── db-verify.mjs # chaîne complète migration -> generated.ts -> tsc -> test
├── dbgen/
│ ├── dbgen.mjs # générateur de generated.ts
│ └── dbgen.metadata.json # surcharges de métadonnées du générateur
├── src/
│ ├── main.ts
│ ├── app.module.ts
│ ├── app.setup.ts
│ ├── config/
│ ├── db/
│ ├── common/
│ ├── auth/
│ ├── admin/
│ ├── core/
│ ├── client/
│ ├── residence/
│ ├── market/
│ ├── pressing/
│ ├── restaurant/
│ ├── salle_fete/
│ ├── facturation/
│ ├── finances/
│ ├── rh/
│ ├── dashboard/
│ ├── rapports/
│ ├── audit/
│ ├── abonnement/
│ ├── jobs/
│ ├── health/
│ ├── metrics/
│ ├── redis/
│ ├── s3/
│ ├── uploads/
│ └── pdf/
└── test/ # harnais Jest e2e + stubs kysely/puppeteer
  1. Copier .env.example vers .env.
  2. Ajuster les paramètres PostgreSQL et Redis pour votre stack Docker local.
  3. Définir NODE_ENV=development et SWAGGER_ENABLED=true pour l’exploration locale.

Variables clés :

Variable Rôle Défaut / source
NODE_ENV development, test, production development
PORT Port HTTP 3000
PGHOST, PGPORT, PGUSER, PGPASSWORD, PGDATABASE Connexion PostgreSQL DB_DEFAULTS
JWT_ACCESS_SECRET, JWT_REFRESH_SECRET Signature JWT (requis en production) jetable en dev
REDIS_URL Redis pour révocation de jetons / files / throttling en mémoire si absent
S3_ENDPOINT, S3_BUCKET, S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY Stockage objet S3_DEFAULTS
PUPPETEER_EXECUTABLE_PATH Binaire Chrome pour le rendu PDF résolu automatiquement dans le Dockerfile
Fenêtre de terminal
cd sim-backend
pnpm install

Le backend exige que src/db/generated.ts soit en phase avec le catalogue PostgreSQL réel. Le chemin le plus simple est pnpm db:verify, qui :

  1. Migre ../sim-database (Flyway).
  2. Régénère src/db/generated.ts avec dbgen/dbgen.mjs.
  3. Vérifie que le diff est vide (git diff --exit-code -- src/db/generated.ts).
  4. Exécute tsc --noEmit.
  5. Exécute pnpm test.
  6. Exécute pnpm db:smoke.
  7. Exécute pnpm db:slice.
Fenêtre de terminal
pnpm db:verify

Pour ne régénérer que generated.ts après une migration :

Fenêtre de terminal
pnpm db:gen

Développement avec rechargement à chaud :

Fenêtre de terminal
pnpm start:dev

Build et exécution de production :

Fenêtre de terminal
pnpm build
pnpm start:prod

Quand SWAGGER_ENABLED=true, la spec OpenAPI est disponible sur :

http://localhost:3000/docs

Chemins de base :

  • /api/v1/* — API métier protégée
  • /metrics — endpoint de scrape Prometheus
  • /api/v1/health/live — sonde de vivacité
  • /api/v1/health/ready — sonde de disponibilité (PostgreSQL + Redis)
Commande Rôle
pnpm lint ESLint 9 avec règles TypeScript strictes
pnpm build Compilation tsc vers dist/
pnpm test Suites unitaires Jest (utilise test/kysely-stub.cjs)
pnpm test:e2e Suites e2e Jest (voir test/jest-e2e.json)
pnpm db:gen Régénère src/db/generated.ts
pnpm db:check Échoue si generated.ts est périmé
pnpm db:smoke Exécute src/db/smoke.ts contre la base réelle
pnpm db:slice:core Exécute le script e2e Core sur base réelle
pnpm security:audit pnpm audit --prod