đ Agents Management
đ Vue d'ensembleâ
Le module Agents Management gĂšre les agents du systĂšme (FOCAL_POINT et AGENT). Il fait partie du grand module Actors et suit la mĂȘme logique que les admins pour crĂ©er un compte utilisateur et un profil agent associĂ©, avec gĂ©nĂ©ration automatique de code agent et gestion des affectations aux localitĂ©s.
đïž Architectureâ
- Queue NATS :
admin-service - Patterns :
agents.* - Sécurité : bcrypt avec salt rounds (10)
- Validation : class-validator pour tous les DTOs
- Relations : Utilisateur, pays, état, localités
đĄ Message Patterns NATSâ
1. Lister les Agentsâ
Pattern : agents.list
Payload (AgentQueryDto)â
{
"page": 1,
"limit": 10,
"type": "FOCAL_POINT",
"countryId": 15,
"stateId": 106,
"status": "ACTIVE",
"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)type(optionnel): Type d'agent (FOCAL_POINT,AGENT)countryId(optionnel): Filtrer par paysstateId(optionnel): Filtrer par état/régionstatus(optionnel): Statut de l'agent (ACTIVE,INACTIVE)search(optionnel): Recherche dans firstName, lastName, email, code
2. DĂ©tails d'un Agentâ
Pattern : agents.details
Payloadâ
{
"id": "agent-uuid"
}
RĂ©ponse inclutâ
- Informations agent complĂštes
- Utilisateur associé
- Pays et état
- Localités affectées
- Statistiques de performance
3. CrĂ©er un Agentâ
Pattern : agents.create
Payload (CreateAgentDto)â
{
"lastName": "Doe",
"firstName": "John",
"email": "john.doe@agent.com",
"phone": "+1234567890",
"password": "securePassword123",
"countryId": 15,
"stateId": 106,
"type": "FOCAL_POINT",
"localityIds": ["locality-uuid-1", "locality-uuid-2"]
}
Logique de CrĂ©ationâ
- Vérification d'unicité : Vérifie que l'email n'existe ni dans
usersni dansagents - Génération du code agent : Format
{ISO_PAYS}-{TYPE_ABREGE}-{NUMERO} - 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 l'agent en une seule transaction
- Valeurs par défaut :
status:ACTIVEroleId:3(rÎle agent)- Code généré automatiquement
- Dates de vérification automatiquement définies
RĂ©ponse de SuccĂšsâ
{
"success": true,
"message": "Agent created successfully",
"result": {
"id": 1,
"publicId": "agent-uuid",
"lastName": "Doe",
"firstName": "John",
"email": "john.doe@agent.com",
"phone": "+1234567890",
"userId": 1,
"countryId": 15,
"stateId": 106,
"code": "BJ-FP-001",
"type": "FOCAL_POINT",
"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@agent.com",
"status": "ACTIVE"
},
"country": {
"id": 15,
"name": "Bénin"
},
"state": {
"id": 106,
"name": "Atlantique"
}
}
}
4. Mettre Ă jour un Agentâ
Pattern : agents.update
Payload (UpdateAgentDto)â
{
"id": "agent-uuid",
"updateData": {
"firstName": "Jane",
"lastName": "Smith",
"phone": "+0987654321",
"type": "AGENT"
}
}
5. Supprimer un Agentâ
Pattern : agents.delete
Payloadâ
{
"id": "agent-uuid"
}
Note : Suppression logique si l'agent a des activités associées.
6. Affecter un Agent Ă une LocalitĂ©â
Pattern : agents.assign-locality
Payloadâ
{
"agentId": "agent-uuid",
"localityId": "locality-uuid",
"isPrimary": true
}
7. Affecter un Agent Ă Plusieurs LocalitĂ©sâ
Pattern : agents.assign-localities
Payloadâ
{
"agentId": "agent-uuid",
"localityIds": ["locality-uuid-1", "locality-uuid-2"],
"isPrimary": false
}
8. Statistiques des Agentsâ
Pattern : agents.stats
RĂ©ponseâ
{
"success": true,
"message": "Agent statistics retrieved successfully",
"result": {
"totalAgents": 50,
"activeAgents": 45,
"focalPoints": 15,
"regularAgents": 35,
"agentsByCountry": [
{"countryId": 15, "countryName": "Bénin", "count": 30},
{"countryId": 16, "countryName": "Nigeria", "count": 20}
],
"agentsByStatus": [
{"status": "ACTIVE", "count": 45},
{"status": "INACTIVE", "count": 5}
],
"recentAgents": [
{
"id": 1,
"publicId": "agent-uuid",
"firstName": "John",
"lastName": "Doe",
"code": "BJ-FP-001",
"type": "FOCAL_POINT",
"createdAt": "2024-01-15T10:00:00Z"
}
]
}
}
đ Enums et Statutsâ
Types d'Agents (AgentType)â
enum AgentType {
FOCAL_POINT = 'FOCAL_POINT', // Point focal (superviseur)
AGENT = 'AGENT' // Agent standard
}
Statuts d'Agent (AgentStatus)â
enum AgentStatus {
ACTIVE = 'ACTIVE', // Actif
INACTIVE = 'INACTIVE' // Inactif
}
GĂ©nĂ©ration du Code Agentâ
Format : {ISO_PAYS}-{TYPE_ABREGE}-{NUMERO}â
- ISO_PAYS : Code ISO du pays (ex: BJ, NG)
- TYPE_ABREGE :
FPpour FOCAL_POINTAGpour AGENT
- NUMERO : Numéro séquentiel sur 3 chiffres (ex: 001, 002)
Exemplesâ
BJ-FP-001: Premier point focal du BéninNG-AG-025: 25Úme agent du Nigeria
đ FonctionnalitĂ©s AvancĂ©esâ
1. Gestion des LocalitĂ©sâ
- Affectation multiple : Un agent peut couvrir plusieurs localités
- Localité principale : Désignation de la zone prioritaire
- Hiérarchie : Points focaux supervisent les agents
- Couverture géographique : Optimisation territoriale
2. GĂ©nĂ©ration Automatique de Codeâ
- Format standardisé : Cohérence dans tout le systÚme
- Unicité garantie : Pas de doublons possibles
- Traçabilité : Identification rapide par pays et type
- ĂvolutivitĂ© : Support de nouveaux pays facilement
3. Validation des DonnĂ©esâ
- Contraintes métier : Vérification des rÚgles business
- Intégrité référentielle : Cohérence des relations
- Validation en temps réel : Feedback immédiat
- Gestion d'erreurs : Messages explicites
đĄ Exemples d'Utilisationâ
CrĂ©er un Point Focalâ
{
"lastName": "Doe",
"firstName": "John",
"email": "john.doe@focalpoint.com",
"phone": "+229123456789",
"password": "SecurePass123!",
"countryId": 15,
"stateId": 106,
"type": "FOCAL_POINT",
"localityIds": ["locality-uuid-1", "locality-uuid-2"]
}
Rechercher des Agents par Typeâ
{
"page": 1,
"limit": 20,
"type": "FOCAL_POINT",
"countryId": 15,
"status": "ACTIVE",
"sortBy": "createdAt",
"sortOrder": "desc"
}
Affecter un Agent Ă Plusieurs LocalitĂ©sâ
{
"agentId": "agent-uuid-123",
"localityIds": ["locality-cotonou", "locality-porto-novo"],
"isPrimary": false
}
đŻ Le module Agents Management offre une gestion complĂšte des agents avec gĂ©nĂ©ration automatique de codes, affectation aux localitĂ©s et hiĂ©rarchie entre points focaux et agents pour optimiser la couverture territoriale.