Application de dépôts de fichiers d'autosurveillance
- Description
- Architecture
- Prérequis
- Installation
- Configuration
- Utilisation
- Scripts disponibles
- Technologies
- Structure du projet
- Développement
- Tests
Verseau2 est une application full-stack permettant le dépôt de fichiers d'autosurveillance. Elle utilise une architecture monorepo avec un backend NestJS et un frontend React.
- 📁 Dépôt de fichiers d'autosurveillance
- ☁️ Stockage sur S3 (Outscale ou mock local)
- ⚡ Traitement asynchrone des fichiers d'autosurveillance
- 🔄 Architecture séparée serveur/worker
- ✅ Contrôles SANDRE et format V1
- 🔐 Authentification OIDC
- 📊 Référentiels Roseau et Lanceleau
- 📧 Système de notifications par email
- 📤 Export SFTP
Le projet est organisé en monorepo avec les composants suivants :
-
Backend (apps/back) : API NestJS
- Serveur HTTP pour l'API REST
- Worker pour le traitement asynchrone des fichiers
- Modules principaux :
dossier: Gestion des dépôts et contrôlesreferentiel: Référentiels Roseau et Lanceleauuser: Gestion des utilisateursauthentication: Authentification OIDCnotification: Système de notifications (email)infra: Infrastructure (DB, S3, Queue, SFTP)
-
Frontend (apps/front) : Application React avec Vite
- Interface utilisateur basée sur le Design System de l'État (DSFR)
- Communication avec l'API backend
-
Packages partagés
@lib/dossier: Types et DTOs partagés@lib/parser: Parser XML pour fichiers SANDRE
- Node.js (version 22+)
- npm
- Docker et Docker Compose (pour l'environnement local)
- PostgreSQL (via Docker)
- Stockage S3 compatible (AWS S3, Outscale, ou mock local)
- Cloner le repository :
git clone <url-du-repo>
cd verseau2- Installer les dépendances :
npm installCela installera automatiquement les dépendances pour tous les workspaces (backend et frontend).
Créer un fichier .env dans apps/back/ basé sur example.env :
# Database
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/verseau2
# S3 Configuration
S3_PROVIDER=mock # ou outscale
S3_BUCKET=MY_BUCKET
S3_ENDPOINT=OUTSCALE_ENDPOINT
S3_REGION=OUTSCALE_REGION
S3_ACCESS_KEY=MY_ACCESS_KEY
S3_SECRET_KEY=MY_SECRET_KEY
# SANDRE Mock Configuration (pour les tests)
USE_SANDRE_MOCK=false
# Logs
LOGS_LEVEL=debug # ou verbose
# Email
EMAIL_PROVIDER=mock # ou brevo ou mailcatcher
# OpenID Connect
OIDC_ISSUER_URL=https://your-oidc-provider/.well-known/openid-configuration
OIDC_CLIENT_ID=your-client-id
OIDC_MOCK=false
OIDC_FAKE_TOKEN=change-me
# SFTP Configuration
SFTP_PROVIDER=mock # ou real
SFTP_HOST=localhost
SFTP_PORT=22
SFTP_USERNAME=user
SFTP_PRIVATE_KEY=keyCréer un fichier .env dans apps/front/ basé sur src/example.env :
VITE_API_BASE_URL=http://localhost:3000Démarrer les services avec Docker Compose :
cd devops/local
docker-compose up -dCela démarre :
- PostgreSQL (base de données)
- S3Mock (Adobe S3Mock pour stockage S3)
- App (application complète - optionnel)
- sync-pg (outil de synchronisation de base de données - optionnel)
Démarrer l'ensemble de l'application (backend + frontend) :
npm run devOu démarrer les services individuellement :
# Backend uniquement
npm run dev:back
# Frontend uniquement
npm run dev:front- Builder l'ensemble du projet :
npm run build- Démarrer le backend en production (serveur + worker) :
npm run startLe frontend compilé est servi automatiquement par le backend via le module FrontendStaticModule.
npm run dev: Démarre backend et frontend en mode développementnpm run dev:back: Démarre uniquement le backendnpm run dev:front: Démarre uniquement le frontendnpm run build: Compile frontend et backendnpm run start: Démarre le backend en productionnpm run test: Lance les tests du backend et du parsernpm run clean: Nettoie tous les workspaces
npm run dev: Démarre serveur et worker en mode watchnpm run start:server:dev: Démarre uniquement le serveur HTTPnpm run start:worker:dev: Démarre uniquement le workernpm run build: Compile le projetnpm run start: Démarre en production (serveur + worker)npm run test: Lance tous les tests (unitaires + e2e)npm run test:cov: Lance les tests avec coveragenpm run test:watch: Lance les tests en mode watchnpm run test:e2e: Lance uniquement les tests end-to-endnpm run lint: Lint et corrige le codenpm run clean: Nettoie les dossiers dist et node_modules
npm run dev: Démarre le serveur de développement Vitenpm run build: Compile pour la productionnpm run preview: Prévisualise le build de productionnpm run lint: Lint le codenpm run format: Formate le code avec Prettiernpm run clean: Nettoie les dossiers dist et node_modules
npm run clean: Nettoie tous les packagesnpm run test: Lance les tests du backend et du parser
- NestJS 11 : Framework Node.js
- TypeORM : ORM pour PostgreSQL
- pg-boss : File d'attente basée sur PostgreSQL
- AWS SDK v3 : Client S3 pour le stockage de fichiers
- TypeScript : Langage de programmation
- Jest : Framework de tests
- Testcontainers : Tests d'intégration avec PostgreSQL
- OpenID Client : Authentification OIDC
- ssh2-sftp-client : Client SFTP
- React 19 : Bibliothèque UI
- Vite : Build tool et dev server
- TypeScript : Langage de programmation
- @codegouvfr/react-dsfr : Design System de l'État Français
- React Router 7 : Routage
- TanStack Query : Gestion des requêtes API
- PostgreSQL : Base de données
- Docker : Conteneurisation
- Adobe S3Mock : Stockage S3 compatible (local)
- Outscale : Fournisseur S3 (production)
verseau2/
├── apps/
│ ├── back/ # Application backend NestJS
│ │ ├── src/
│ │ │ ├── api/ # Module API principal
│ │ │ ├── dossier/ # Gestion des dépôts et contrôles
│ │ │ │ ├── depot/ # Dépôts de fichiers
│ │ │ │ └── controle/ # Contrôles SANDRE et V1
│ │ │ ├── referentiel/ # Référentiels (Roseau, Lanceleau)
│ │ │ ├── user/ # Gestion des utilisateurs
│ │ │ ├── authentication/# Authentification OIDC
│ │ │ ├── notification/ # Système de notifications
│ │ │ ├── infra/ # Infrastructure (DB, S3, Queue, SFTP)
│ │ │ ├── shared/ # Code partagé
│ │ │ ├── worker/ # Workers asynchrones
│ │ │ ├── mainServer.ts # Point d'entrée serveur HTTP
│ │ │ └── mainWorker.ts # Point d'entrée worker
│ │ └── test/ # Tests e2e
│ └── front/ # Application frontend React
│ └── src/
│ ├── components/ # Composants réutilisables
│ ├── pages/ # Pages de l'application
│ └── api/ # Client API
├── packages/ # Packages partagés
│ ├── dossier/ # Types et DTOs partagés
│ └── parser/ # Parser XML SANDRE
├── devops/
│ ├── local/ # Configuration Docker locale
│ │ └── docker-compose.yml
│ └── tools/ # Outils DevOps
│ └── sync-pg/ # Synchronisation base de données
└── package.json # Configuration monorepo
Le backend suit une architecture hexagonale avec :
- Entities : Entités métier
- Use Cases : Logique métier
- Repositories : Abstraction de persistance
- Controllers : Points d'entrée HTTP
- Services : Orchestration
- Utilisation de TypeScript strict
- ESLint pour la qualité du code (ESLint 9 avec flat config)
- Prettier pour le formatage
- Git hooks avec Husky pour validation pre-commit
-
Fichiers :
camelCasepour les fichiers TypeScript :depot.service.ts,depot.controller.ts- Suffixes selon le type :
.entity.ts,.service.ts,.controller.ts,.repository.ts,.gateway.ts,.module.ts,.dto.ts,.guard.ts,.decorator.ts
-
Classes et Interfaces :
PascalCasepour les classes :DepotEntity,DepotService,DepotControllerPascalCasepour les interfaces/gateways :DepotGateway,RoseauGateway- Suffixes explicites :
Entity,Service,Controller,Repository,Gateway,Module,Guard,Decorator
-
Use Cases :
PascalCaseavec nom descriptif :DeposerUnFichier- Fichier en
camelCase:deposerUnFichier.ts
-
Variables et fonctions :
camelCase:depotService,findUserById(),createDepot()
-
Constantes et enums :
PascalCasepour les enums :SandreTags,DepotStatusUPPER_SNAKE_CASEpour les variables d'environnement :DATABASE_URL,S3_PROVIDER
-
Fichiers :
PascalCasepour les composants React :Dashboard.tsx,DepotUpload.tsxcamelCasepour les utilitaires :controleMapper.ts,useDepotRecap.ts
-
Composants :
PascalCase:Dashboard,FileDropZone,StatCard
-
Hooks personnalisés :
- Préfixe
use+PascalCase:usePagination,useDepotRecap
- Préfixe
-
Dossiers :
kebab-casepour les dossiers de fonctionnalités :depot-upload-recap/camelCaseou lowercase pour les dossiers techniques :components/,pages/,api/
Le projet supporte plusieurs environnements de mock pour faciliter le développement :
- SANDRE Mock :
USE_SANDRE_MOCK=true- Mock le service de validation SANDRE - S3 Mock :
S3_PROVIDER=mock- Utilise Adobe S3Mock pour le stockage - Email Mock :
EMAIL_PROVIDER=mock- Mock l'envoi d'emails - SFTP Mock :
SFTP_PROVIDER=mock- Mock le serveur SFTP - OIDC Mock :
OIDC_MOCK=true- Mock l'authentification OIDC
- Créer une branche feature :
git checkout -b feature/nom-feature - Développer et tester
- Commiter avec des messages clairs
- Créer une pull request
cd apps/back
# Tests unitaires
npm run test
# Tests avec coverage
npm run test:cov
# Tests e2e
npm run test:e2e
# Tests en mode watch
npm run test:watch