Skip to main content

🔧 Admin Management

📋 Vue d'ensemble

Le module Admin Management fait partie du grand module Actors et gère les profils administrateurs du système. Il suit la logique du seeder pour créer à la fois un compte utilisateur et un profil admin associé en une seule transaction.

🏗️ Architecture

  • Queue NATS : admin-service
  • Patterns : admins.*
  • Sécurité : bcrypt avec salt rounds (10)
  • Validation : class-validator pour tous les DTOs
  • Transaction : Création atomique utilisateur + admin

📡 Message Patterns NATS

1. Créer un Admin

Pattern : admins.create

Crée un nouveau compte utilisateur et un profil admin associé en une seule transaction.

Payload (CreateAdminDto)

{
"lastName": "Doe",
"firstName": "John",
"email": "john.doe@example.com",
"phone": "+1234567890",
"password": "securePassword123",
"countryId": 15,
"stateId": 106,
"accessType": "ADMIN",
"permissions": {
"users": ["create", "read", "update", "delete"],
"roles": ["create", "read", "update"],
"settings": ["read", "update"]
},
"roleId": 2
}

Logique de Création

  1. Vérification d'unicité : Vérifie que l'email n'existe ni dans users ni dans admins
  2. Hachage du mot de passe : Utilise bcrypt avec un salt de 10
  3. Génération du username : {firstName} {LASTNAME} (ex: "John DOE")
  4. Transaction : Crée l'utilisateur puis l'admin en une seule transaction
  5. Valeurs par défaut :
    • status: ACTIVE
    • roleId: 2 (rôle admin)
    • accessType: ADMIN
    • Dates de vérification automatiquement définies

Réponse de Succès

{
"success": true,
"message": "Admin created successfully",
"result": {
"id": 1,
"publicId": "uuid-here",
"lastName": "Doe",
"firstName": "John",
"email": "john.doe@example.com",
"phone": "+1234567890",
"userId": 1,
"countryId": 15,
"stateId": 106,
"accessType": "ADMIN",
"permissions": {
"users": ["create", "read", "update", "delete"],
"roles": ["create", "read", "update"],
"settings": ["read", "update"]
},
"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@example.com",
"status": "ACTIVE"
},
"country": {
"id": 15,
"name": "France"
}
}
}

2. Lister les Admins

Pattern : admins.list

Payload (AdminQueryDto)

{
"page": 1,
"limit": 10,
"accessType": "ADMIN",
"countryId": 15,
"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)
  • accessType (optionnel): Filtrer par type d'accès (SUPER_ADMIN, ADMIN, SUPPORT)
  • countryId (optionnel): Filtrer par pays
  • search (optionnel): Recherche dans firstName, lastName, email

3. Détails d'un Admin

Pattern : admins.details

Payload

{
"id": "admin-uuid"
}

Réponse

Retourne les informations complètes de l'admin avec les relations (user, country, state).

4. Mettre à jour un Admin

Pattern : admins.update

Payload (UpdateAdminDto)

{
"id": "admin-uuid",
"updateData": {
"lastName": "Smith",
"firstName": "Jane",
"phone": "+0987654321",
"accessType": "SUPER_ADMIN",
"permissions": {
"users": ["create", "read", "update", "delete"],
"roles": ["create", "read", "update", "delete"],
"settings": ["create", "read", "update", "delete"]
}
}
}

5. Supprimer un Admin

Pattern : admins.delete

Payload

{
"id": "admin-uuid"
}

Note : Suppression logique (soft delete) - l'admin est marqué comme supprimé mais conservé en base.

🔐 Types d'Accès (AdminRole)

TypeDescriptionPermissions
SUPER_ADMINAccès complet au systèmeToutes les permissions
ADMINAccès administrateur standardPermissions limitées
SUPPORTAccès support clientLecture et support uniquement

🛡️ Structure des Permissions

{
"users": ["create", "read", "update", "delete"],
"roles": ["create", "read", "update", "delete"],
"settings": ["create", "read", "update", "delete"],
"reports": ["read", "export"],
"analytics": ["read"],
"forum": ["moderate", "delete"],
"complaints": ["assign", "resolve"],
"transports": ["view", "manage"]
}

📊 Validation et Contraintes

Champs Obligatoires

  • lastName : Nom de famille
  • firstName : Prénom
  • email : Email unique
  • password : Mot de passe sécurisé
  • countryId : Pays d'origine

Règles de Validation

  • Email : Format valide et unique
  • Téléphone : Format international
  • Mot de passe : Minimum 8 caractères, complexité requise
  • Pays/État : Doivent exister en base

🚀 Fonctionnalités Avancées

1. Gestion des Sessions

  • Suivi automatique des connexions admin
  • Détection d'anomalies : Connexions suspectes
  • Terminaison forcée : Par les super-admins

2. Audit Trail

  • Historique complet : Toutes les modifications
  • Traçabilité : Qui a fait quoi et quand
  • Logs sécurisés : Stockage immutable

3. Notifications

  • Alertes automatiques : Nouvelles créations
  • Notifications par email : Changements importants
  • Système d'escalade : Problèmes critiques

💡 Exemples d'Utilisation

Créer un Super Admin

{
"lastName": "Admin",
"firstName": "Super",
"email": "superadmin@ofr.cm",
"phone": "+237123456789",
"password": "SuperSecure123!",
"countryId": 15,
"stateId": 106,
"accessType": "SUPER_ADMIN",
"permissions": {
"users": ["create", "read", "update", "delete"],
"roles": ["create", "read", "update", "delete"],
"settings": ["create", "read", "update", "delete"],
"reports": ["read", "export"],
"analytics": ["read"]
}
}

Rechercher des Admins

{
"page": 1,
"limit": 20,
"search": "support",
"accessType": "SUPPORT",
"sortBy": "createdAt",
"sortOrder": "desc"
}

🎯 Le module Admin Management offre une gestion complète et sécurisée des administrateurs avec des permissions granulaires et un audit trail complet.