Aller au contenu

Exploitation

Le backend embarque une surface de scripts complète pour le développement local, la CI et le déploiement. La commande la plus importante est pnpm db:verify, qui garantit le contrat schéma/types.

Script Rôle
pnpm lint ESLint 9 strict (@typescript-eslint/no-unsafe-*, no-floating-promises, etc.)
pnpm build nest build / tsc vers dist/
pnpm test Tests unitaires Jest (src/**/*.spec.ts) avec test/kysely-stub.cjs
pnpm test:e2e Suite e2e Jest (test/jest-e2e.json)
pnpm db:gen Régénère src/db/generated.ts depuis PostgreSQL réel
pnpm db:check Échoue si generated.ts est périmé
pnpm db:verify Chaîne complète migration → generated.ts → tsc → tests
pnpm db:smoke Exécute src/db/smoke.ts contre la base réelle
pnpm db:slice Exécute toutes les tranches sur base réelle
pnpm db:slice:<module> Exécute la tranche d’un module (core, client, admin, finances, facturation, market, pressing, restaurant, salle-fete, rh, audit, uploads)
pnpm security:audit pnpm audit --prod

scripts/db-verify.mjs est le corps de la CI :

  1. make migrate (ou make reset --fresh) dans ../sim-database
  2. pnpm db:gen
  3. git diff --exit-code -- src/db/generated.ts
  4. pnpm exec tsc --noEmit
  5. pnpm test
  6. pnpm db:smoke
  7. pnpm db:slice

Une PR de migration doit embarquer son diff generated.ts ; db:verify échoue s’il est périmé.

  • Étape de build node:22-alpine
  • Étape runtime node:22-slim
  • pnpm@11.9.0 avec --frozen-lockfile
  • Installe postgresql-client-18 pour les sauvegardes
  • Installe les bibliothèques Chromium desktop pour Puppeteer
  • Lien symbolique Chrome vers /opt/chrome-bin
  • Healthcheck : wget sur /api/v1/health/live

docker-compose.local.yml lance le backend et Redis. PostgreSQL est attendu depuis ../sim-database sur host.docker.internal.

Fenêtre de terminal
docker compose -f docker-compose.local.yml up -d

docker-compose.dev.yml cible le VPS (dev.sim.strife-cyber.org) derrière Traefik. Il comprend :

  • backend sur internal + traefik-net
  • un service worker pour cron et BullMQ
  • sim-minio (renommé pour éviter les collisions DNS)
  • un Postgres externe mutualisé

docker-compose.prod.yml comprend :

  • sim-backend et redis
  • prod-network et traefik-net en réseaux externes
  • du vrai S3 (pas de MinIO dans le stack)
  • Redis avec REDIS_PASSWORD

src/config/db-defaults.ts est la source de vérité unique des défauts PostgreSQL :

export const DB_DEFAULTS = {
host: '127.0.0.1',
port: 5432,
user: 'sim',
password: 'admin',
database: 'sim_db',
poolMax: 20,
poolIdleTimeoutMs: 30000,
poolConnectionTimeoutMs: 5000,
pgAppName: 'sim-backend',
} as const;

src/config/env.validation.ts valide .env avec Joi et exige conditionnellement les secrets en production.

postgresql-client-18 est installé dans l’image Docker. jobs/sauvegarde-auto.job.ts lit sauvegardes.planification et déclenche SauvegardesService.declencher('AUTOMATIQUE') selon la planification. Il n’y a actuellement pas d’API publique pour les sauvegardes ; c’est de l’infrastructure uniquement.

Avant de commiter tout changement backend :

Fenêtre de terminal
pnpm lint
pnpm build
pnpm test
pnpm db:verify

Après une migration sim-database :

Fenêtre de terminal
pnpm db:gen
git diff src/db/generated.ts
pnpm db:check