đ€ Customers Management
đ Vue d'ensembleâ
Le module Customers Management gÚre les clients du systÚme. Il fait partie du grand module Actors et fournit des fonctionnalités CRUD complÚtes pour la gestion des profils clients avec validation des données et gestion des relations.
đïž Architectureâ
- Queue NATS :
admin-service - Patterns :
customers.* - Sécurité : bcrypt avec salt rounds (10)
- Validation : class-validator pour tous les DTOs
- Relations : Utilisateur, pays, état
đĄ Message Patterns NATSâ
1. Lister les Clientsâ
Pattern : customers.all
Payload (CustomerQueryDto)â
{
"page": 1,
"limit": 10,
"countryId": 15,
"stateId": 106,
"status": "ACTIVE",
"gender": "MALE",
"search": "john.doe",
"sortBy": "createdAt",
"sortOrder": "desc"
}
Filtres Disponiblesâ
page(optionnel): Numéro de page (défaut: 1)limit(optionnel): Nombre d'éléments par page (défaut: 10)countryId(optionnel): Filtrer par paysstateId(optionnel): Filtrer par état/régionstatus(optionnel): Statut du client (ACTIVE,INACTIVE,SUSPENDED,BLOCKED)gender(optionnel): Genre (MALE,FEMALE)search(optionnel): Recherche dans firstName, lastName, email
2. DĂ©tails d'un Clientâ
Pattern : customers.details
Payloadâ
{
"id": "customer-uuid"
}
RĂ©ponse inclutâ
- Informations client complĂštes
- Utilisateur associé
- Pays et état
- Statistiques de transports
- Historique des activités
3. CrĂ©er un Clientâ
Pattern : customers.create
Payload (CreateCustomerDto)â
{
"lastName": "Doe",
"firstName": "John",
"email": "john.doe@customer.com",
"phone": "+1234567890",
"password": "securePassword123",
"countryId": 15,
"stateId": 106,
"gender": "MALE",
"dateOfBirth": "1990-01-01"
}
Logique de CrĂ©ationâ
- Vérification d'unicité : Vérifie que l'email n'existe ni dans
usersni danscustomers - Hachage du mot de passe : Utilise bcrypt avec un salt de 10
- Génération du username :
{firstName} {LASTNAME}(ex: "John DOE") - Transaction : Crée l'utilisateur puis le client en une seule transaction
- Valeurs par défaut :
status:ACTIVEroleId:1(rÎle client)- Dates de vérification automatiquement définies
RĂ©ponse de SuccĂšsâ
{
"success": true,
"message": "Customer created successfully",
"result": {
"id": 1,
"publicId": "customer-uuid",
"lastName": "Doe",
"firstName": "John",
"email": "john.doe@customer.com",
"phone": "+1234567890",
"userId": 1,
"countryId": 15,
"stateId": 106,
"gender": "MALE",
"dateOfBirth": "1990-01-01T00:00:00.000Z",
"status": "ACTIVE",
"createdAt": "2024-01-01T00:00:00.000Z",
"updatedAt": "2024-01-01T00:00:00.000Z",
"user": {
"id": 1,
"publicId": "user-uuid",
"username": "John DOE",
"email": "john.doe@customer.com",
"status": "ACTIVE"
},
"country": {
"id": 15,
"name": "Bénin"
},
"state": {
"id": 106,
"name": "Atlantique"
}
}
}
4. Mettre Ă jour un Clientâ
Pattern : customers.update
Payload (UpdateCustomerDto)â
{
"id": "customer-uuid",
"updateData": {
"firstName": "Jane",
"lastName": "Smith",
"phone": "+0987654321",
"gender": "FEMALE"
}
}
5. Supprimer un Clientâ
Pattern : customers.delete
Payloadâ
{
"id": "customer-uuid"
}
Note : Suppression logique si le client a des transports ou plaintes associés.
6. Changer le Statut d'un Clientâ
Pattern : customers.change-status
Payloadâ
{
"id": "customer-uuid",
"statusData": {
"status": "SUSPENDED",
"reason": "Activité suspecte détectée"
}
}
7. Statistiques des Clientsâ
Pattern : customers.stats
RĂ©ponseâ
{
"success": true,
"message": "Customer statistics retrieved successfully",
"result": {
"totalCustomers": 500,
"activeCustomers": 450,
"inactiveCustomers": 30,
"suspendedCustomers": 20,
"customersByCountry": [
{"countryId": 15, "countryName": "Bénin", "count": 250},
{"countryId": 16, "countryName": "Nigeria", "count": 250}
],
"customersByGender": [
{"gender": "MALE", "count": 300},
{"gender": "FEMALE", "count": 200}
],
"customersThisMonth": 45,
"topCustomers": [
{
"id": 1,
"publicId": "customer-uuid",
"firstName": "John",
"lastName": "Doe",
"email": "john.doe@customer.com",
"transportsCount": 25,
"totalSpent": 50000.00
}
],
"recentCustomers": [
{
"id": 1,
"publicId": "customer-uuid",
"firstName": "John",
"lastName": "Doe",
"email": "john.doe@customer.com",
"createdAt": "2024-01-15T10:00:00Z"
}
]
}
}
đ Enums et Statutsâ
Statuts Client (CustomerStatus)â
enum CustomerStatus {
ACTIVE = 'ACTIVE', // Actif
INACTIVE = 'INACTIVE', // Inactif
SUSPENDED = 'SUSPENDED', // Suspendu
BLOCKED = 'BLOCKED' // Bloqué
}
Genre (Gender)â
enum Gender {
MALE = 'MALE', // Masculin
FEMALE = 'FEMALE' // Féminin
}
đ FonctionnalitĂ©s AvancĂ©esâ
1. Validation des DonnĂ©esâ
- Contraintes métier : Vérification des rÚgles business
- Validation des emails : Format et unicité
- Validation des téléphones : Format international
- Intégrité référentielle : Cohérence des relations
2. Gestion des Statutsâ
- Changement de statut : Avec raison obligatoire
- Historique des statuts : Traçabilité complÚte
- Notifications automatiques : Alertes sur changements
- RÚgles métier : Validation des transitions
3. Recherche et Filtrageâ
- Recherche multi-critÚres : Nom, email, téléphone
- Filtres avancés : Par pays, état, genre, statut
- Tri personnalisé : Par différents champs
- Pagination : Performance optimisée
đĄ Exemples d'Utilisationâ
CrĂ©er un Client Standardâ
{
"lastName": "Doe",
"firstName": "Jane",
"email": "jane.doe@example.com",
"phone": "+229987654321",
"password": "SecurePass123!",
"countryId": 15,
"stateId": 106,
"gender": "FEMALE",
"dateOfBirth": "1985-03-15"
}
Rechercher des Clients par Genreâ
{
"page": 1,
"limit": 20,
"gender": "FEMALE",
"countryId": 15,
"status": "ACTIVE",
"sortBy": "createdAt",
"sortOrder": "desc"
}
Suspendre un Client ProblĂ©matiqueâ
{
"id": "customer-problem-001",
"statusData": {
"status": "SUSPENDED",
"reason": "Comportement abusif signalé par plusieurs agents"
}
}
đŻ Le module Customers Management offre une gestion complĂšte des clients avec validation des donnĂ©es, gestion des statuts et recherche avancĂ©e pour optimiser la relation client et assurer la qualitĂ© du service.