🔧 Microservices
Détail de chaque microservice de l'architecture Commerce Tracking.
🌐 API Gateway
Vue d'ensemble
Le Gateway API est le point d'entrée unique pour toutes les requêtes client. Il orchestre les communications entre les clients et les microservices backend.
Technologies
- Framework : NestJS 11.x
- Langage : TypeScript 5.7.x
- Communication : NATS Client
- Validation : Class Validator & Class Transformer
- Cache : Cache Manager (Redis compatible)
Structure du projet
gateway-api/
├── src/
│ ├── admin/ # Module d'administration
│ ├── auth/ # Module d'authentification
│ │ ├── dto/ # Data Transfer Objects
│ │ ├── auth.controller.ts # Contrôleur d'authentification
│ │ ├── auth.service.ts # Service d'authentification
│ │ ├── auth.guard.ts # Guard d'authentification
│ │ └── auth.module.ts # Module d'authentification
│ ├── common-data/ # Module des données communes
│ ├── trade-flow/ # Module des flux commerciaux
│ ├── filters/ # Filtres d'exception
│ ├── interceptors/ # Intercepteurs
│ ├── nats-client/ # Client NATS
│ ├── shared/ # Utilitaires partagés
│ ├── app.controller.ts # Contrôleur principal
│ ├── app.module.ts # Module principal
│ └── main.ts # Point d'entrée
Endpoints principaux
// Authentification
POST /auth/login # Connexion
POST /auth/logout # Déconnexion
POST /auth/refresh # Rafraîchissement token
GET /auth/profile # Profil utilisateur
// Collections
POST /trade-flow/collections # Créer une collection
GET /trade-flow/collections # Lister les collections
GET /trade-flow/collections/:id # Obtenir une collection
PUT /trade-flow/collections/:id # Modifier une collection
DELETE /trade-flow/collections/:id # Supprimer une collection
// Données communes
GET /common-data/countries # Pays
GET /common-data/currencies # Devises
GET /common-data/products # Produits
🔐 Auth Service
Vue d'ensemble
Le Auth Service gère l'authentification et l'autorisation des utilisateurs du système.
Technologies
- Framework : NestJS
- Base de données : MySQL avec TypeORM
- Communication : NATS Server
- JWT : jsonwebtoken
- Hashing : bcrypt
Fonctionnalités
- Authentification des utilisateurs
- Génération et validation des tokens JWT
- Gestion des sessions utilisateur
- Contrôle d'accès basé sur les rôles
- Rafraîchissement des tokens
Queues NATS
// Messages d'authentification
'auth.login' // Processus de connexion
'auth.validate' // Validation des tokens
'auth.refresh' // Rafraîchissement des tokens
'auth.logout' // Déconnexion
'auth.profile' // Récupération du profil
Modèle de données
// User Entity
interface User {
id: number;
username: string;
email: string;
password: string;
role_id: number;
country_id: number;
is_active: boolean;
created_at: Date;
updated_at: Date;
}
// Role Entity
interface Role {
id: number;
name: string;
permissions: string[];
level: number;
}
Workflow d'authentification
sequenceDiagram
participant C as Client
participant G as Gateway
participant A as Auth Service
participant D as Database
C->>G: POST /auth/login {credentials}
G->>A: auth.login {username, password}
A->>D: SELECT user WHERE username = ?
D-->>A: User data
A->>A: bcrypt.compare(password, hash)
A->>A: Generate JWT token
A-->>G: { token, user, expires_in }
G-->>C: Authentication success
⚙️ Admin Service
Vue d'ensemble
Le Admin Service gère l'administration du système, les utilisateurs, les rôles et les données de référence.
Technologies
- Framework : NestJS
- Base de données : MySQL avec TypeORM
- Communication : NATS Server
- Validation : Class Validator
Fonctionnalités
- Gestion des utilisateurs et rôles
- Administration des acteurs commerciaux
- Gestion des données de référence
- Configuration système
- Audit et logs d'administration
Queues NATS
// Messages d'administration
'admin.users.create' // Créer un utilisateur
'admin.users.update' // Modifier un utilisateur
'admin.users.delete' // Supprimer un utilisateur
'admin.roles.manage' // Gestion des rôles
'admin.actors.manage' // Gestion des acteurs
'admin.config.update' // Configuration système
Modèles de données
// Actor Entity
interface Actor {
id: number;
actor_role: string;
first_name: string;
last_name: string;
email: string;
phone: string;
country_id: number;
is_active: boolean;
created_at: Date;
updated_at: Date;
}
// Reference Data
interface ReferenceData {
id: number;
type: string; // 'country', 'currency', 'product', etc.
code: string;
name: string;
description?: string;
metadata?: any;
}
💰 TradeFlow Service
Vue d'ensemble
Le TradeFlow Service est le cœur métier du système, gérant les flux commerciaux, les collections et les validations.
Technologies
- Framework : NestJS
- Base de données : MySQL avec TypeORM
- Communication : NATS Server
- Validation : Class Validator
- Reporting : Custom reporting engine
Fonctionnalités
- Création et gestion des collections
- Workflow de validation multi-niveaux
- Collectes digitalisées
- Génération de rapports et statistiques
- Gestion des états et transitions
Queues NATS
// Messages TradeFlow
'tradeflow.collections.create' // Créer une collection
'tradeflow.collections.update' // Modifier une collection
'tradeflow.collections.delete' // Supprimer une collection
'tradeflow.collections.get' // Récupérer une collection
'tradeflow.collections.list' // Lister les collections
'tradeflow.validation.submit' // Soumettre pour validation
'tradeflow.validation.approve' // Approuver une validation
'tradeflow.validation.reject' // Rejeter une validation
'tradeflow.reports.generate' // Générer des rapports
'tradeflow.statistics.calculate' // Calculer les statistiques
Modèles de données
// Collection Entity
interface Collection {
id: number;
public_id: string;
collection_date: Date;
collector_id: number;
status: 'draft' | 'submitted' | 'validated' | 'rejected';
validation_level: number;
data: any; // JSON data
created_at: Date;
updated_at: Date;
}
// Validation Entity
interface Validation {
id: number;
collection_id: number;
validator_id: number;
level: number;
status: 'pending' | 'approved' | 'rejected';
comments?: string;
validated_at?: Date;
created_at: Date;
}
Workflow de validation
stateDiagram-v2
[*] --> Draft: Create Collection
Draft --> Submitted: Submit for Validation
Submitted --> TeamManagerValidation: Level 1 Validation
TeamManagerValidation --> Approved: Approve
TeamManagerValidation --> Rejected: Reject
TeamManagerValidation --> SupervisorValidation: Level 2 Validation
SupervisorValidation --> Approved: Approve
SupervisorValidation --> Rejected: Reject
Rejected --> Draft: Return for Correction
Approved --> [*]
📦 Model Service
Vue d'ensemble
Le Model Service gère les définitions de modèles de données, les types et les métadonnées du système.
Technologies
- Framework : NestJS
- Base de données : MySQL avec TypeORM
- Communication : NATS Server
- Validation : JSON Schema
Fonctionnalités
- Définition des modèles de données
- Gestion des types de produits et animaux
- Configuration des workflows
- Métadonnées système
- Validation des schémas
Queues NATS
// Messages Model
'model.definitions.get' // Récupérer les définitions
'model.definitions.create' // Créer une définition
'model.types.list' // Lister les types
'model.schemas.validate' // Valider un schéma
'model.metadata.get' // Récupérer les métadonnées
Modèles de données
// Model Definition Entity
interface ModelDefinition {
id: number;
name: string;
version: string;
schema: any; // JSON Schema
fields: ModelField[];
created_at: Date;
updated_at: Date;
}
// Model Field Entity
interface ModelField {
id: number;
model_definition_id: number;
name: string;
type: string;
required: boolean;
validation_rules?: any;
metadata?: any;
}
🗄️ Base de données MySQL
Configuration
- Port : 3340
- Engine : InnoDB
- Charset : UTF8MB4
- ORM : TypeORM
- Migrations : Automatiques
Schéma principal
-- Tables principales
users # Utilisateurs du système
roles # Rôles et permissions
actors # Acteurs commerciaux
collections # Collections de données
validations # Validations multi-niveaux
reference_data # Données de référence
model_definitions # Définitions de modèles
audit_logs # Logs d'audit
-- Tables de référence
countries # Pays
currencies # Devises
products # Produits
animals # Animaux
transport_modes # Modes de transport
regions # Régions géographiques
districts # Districts
cities # Villes
Relations principales
erDiagram
users ||--o{ collections : creates
users ||--o{ validations : validates
roles ||--o{ users : assigned_to
collections ||--o{ validations : has
countries ||--o{ users : located_in
countries ||--o{ actors : located_in
actors ||--o{ collections : collects
📡 Communication NATS
Configuration NATS
// Configuration du client NATS
{
servers: ['nats://localhost:4222'],
reconnect: true,
maxReconnectAttempts: 10,
reconnectTimeWait: 2000,
timeout: 5000,
maxPayload: 1024 * 1024, // 1MB
}
Patterns de communication
// Request-Response Pattern
const response = await natsClient.send('auth.validate', { token });
// Publish-Subscribe Pattern
natsClient.emit('tradeflow.collection.created', { collectionId });
// Queue Groups
natsClient.subscribe('tradeflow.validation', { queue: 'validation-workers' });
Gestion des erreurs
// Timeout handling
try {
const response = await natsClient.send('auth.validate', { token }, { timeout: 5000 });
} catch (error) {
if (error.code === 'TIMEOUT') {
// Handle timeout
}
}
// Retry mechanism
const maxRetries = 3;
for (let i = 0; i < maxRetries; i++) {
try {
const response = await natsClient.send('service.action', data);
break;
} catch (error) {
if (i === maxRetries - 1) throw error;
await new Promise(resolve => setTimeout(resolve, 1000 * (i + 1)));
}
}
Cette architecture microservices permet une évolution indépendante de chaque service tout en maintenant la cohérence globale du système. Chaque service peut être développé, testé et déployé séparément.