👤 Users & Sessions
📋 Vue d'ensemble
Le module Users & Sessions permet aux administrateurs de gérer les utilisateurs du système et surveiller leurs sessions. Il offre des outils complets pour la gestion des comptes, la sécurité et le monitoring des activités.
🏗️ Architecture
- Queue NATS :
admin-service - Patterns :
users.*,sessions.* - Sécurité : Monitoring des sessions
- Gestion : Comptes utilisateurs
- Analytics : Activité et engagement
📡 Message Patterns NATS - Users
1. Lister les Utilisateurs
Pattern : users.all
Payload (UserQueryDto)
{
"page": 1,
"limit": 10,
"status": "ACTIVE",
"role": "CLIENT",
"search": "john.doe",
"sortBy": "createdAt",
"sortOrder": "desc"
}
Filtres Disponibles
| Filtre | Type | Description |
|---|---|---|
status | String | Statut du compte (ACTIVE, INACTIVE, SUSPENDED, DELETED) |
role | String | Rôle utilisateur (CLIENT, DRIVER, ADMIN) |
isVerified | Boolean | Compte vérifié ou non |
search | String | Recherche dans nom, email, téléphone |
Réponse
{
"success": true,
"message": "Users retrieved successfully",
"result": {
"data": [
{
"id": 1,
"publicId": "user-uuid",
"username": "John DOE",
"email": "john.doe@example.com",
"phone": "+237123456789",
"status": "ACTIVE",
"role": "CLIENT",
"isVerified": true,
"emailVerifiedAt": "2024-01-10T10:00:00Z",
"phoneVerifiedAt": "2024-01-10T10:05:00Z",
"lastLoginAt": "2024-01-15T08:30:00Z",
"createdAt": "2024-01-10T09:00:00Z",
"profile": {
"firstName": "John",
"lastName": "Doe",
"country": "Cameroun",
"city": "Douala"
}
}
],
"pagination": {
"page": 1,
"limit": 10,
"total": 1250,
"totalPages": 125
}
}
}
2. Détails d'un Utilisateur
Pattern : users.details
Payload
{
"id": "user-uuid"
}
Réponse Complète
{
"success": true,
"message": "User details retrieved successfully",
"result": {
"id": 1,
"publicId": "user-uuid",
"username": "John DOE",
"email": "john.doe@example.com",
"phone": "+237123456789",
"status": "ACTIVE",
"role": "CLIENT",
"isVerified": true,
"emailVerifiedAt": "2024-01-10T10:00:00Z",
"phoneVerifiedAt": "2024-01-10T10:05:00Z",
"lastLoginAt": "2024-01-15T08:30:00Z",
"createdAt": "2024-01-10T09:00:00Z",
"updatedAt": "2024-01-15T08:30:00Z",
"profile": {
"firstName": "John",
"lastName": "Doe",
"dateOfBirth": "1990-05-15",
"country": "Cameroun",
"city": "Douala",
"address": "Rue de la Liberté, Akwa",
"avatar": "/uploads/avatars/user-avatar.jpg"
},
"statistics": {
"totalTransports": 25,
"completedTransports": 23,
"cancelledTransports": 2,
"totalSpent": "2500000 FCFA",
"averageRating": 4.7,
"joinedDaysAgo": 35
},
"recentActivity": [
{
"action": "LOGIN",
"timestamp": "2024-01-15T08:30:00Z",
"details": "Connexion depuis mobile app"
},
{
"action": "TRANSPORT_CREATED",
"timestamp": "2024-01-14T15:20:00Z",
"details": "Nouveau transport CAM-2024-001"
}
]
}
}
3. Suspendre/Activer un Utilisateur
Pattern : users.update-status
Payload
{
"id": "user-uuid",
"statusData": {
"status": "SUSPENDED",
"reason": "Violation des conditions d'utilisation",
"suspensionDuration": "7 days",
"comment": "Suspension temporaire suite à signalements multiples"
}
}
4. Statistiques des Utilisateurs
Pattern : users.stats
Payload
{
"period": "month"
}
Réponse
{
"success": true,
"message": "User statistics retrieved successfully",
"result": {
"overview": {
"totalUsers": 1250,
"activeUsers": 1180,
"suspendedUsers": 45,
"deletedUsers": 25,
"newUsersThisMonth": 85
},
"byRole": [
{"role": "CLIENT", "count": 950},
{"role": "DRIVER", "count": 280},
{"role": "ADMIN", "count": 20}
],
"byStatus": [
{"status": "ACTIVE", "count": 1180},
{"status": "INACTIVE", "count": 25},
{"status": "SUSPENDED", "count": 45}
],
"verification": {
"emailVerified": 1100,
"phoneVerified": 1050,
"fullyVerified": 1000
},
"engagement": {
"dailyActiveUsers": 320,
"weeklyActiveUsers": 680,
"monthlyActiveUsers": 950
}
}
}
📡 Message Patterns NATS - Sessions
1. Lister les Sessions Actives
Pattern : sessions.active
Payload (SessionQueryDto)
{
"page": 1,
"limit": 10,
"userId": "user-uuid",
"deviceType": "mobile",
"sortBy": "lastActivity",
"sortOrder": "desc"
}
Réponse
{
"success": true,
"message": "Active sessions retrieved successfully",
"result": {
"data": [
{
"id": 1,
"publicId": "session-uuid",
"userId": "user-uuid",
"deviceType": "mobile",
"deviceInfo": "iPhone 13 Pro - iOS 17.2",
"ipAddress": "192.168.1.100",
"location": "Douala, Cameroun",
"userAgent": "FreeTrade Mobile App v2.1.0",
"createdAt": "2024-01-15T08:30:00Z",
"lastActivity": "2024-01-15T14:20:00Z",
"isActive": true,
"user": {
"id": 1,
"username": "John DOE",
"email": "john.doe@example.com"
}
}
],
"pagination": {
"page": 1,
"limit": 10,
"total": 450,
"totalPages": 45
}
}
}
2. Terminer une Session
Pattern : sessions.terminate
Payload
{
"id": "session-uuid",
"reason": "Activité suspecte détectée"
}
3. Terminer toutes les Sessions d'un Utilisateur
Pattern : sessions.terminate-user-sessions
Payload
{
"userId": "user-uuid",
"reason": "Demande de sécurité - réinitialisation des sessions",
"excludeCurrentSession": false
}
4. Statistiques des Sessions
Pattern : sessions.stats
Payload
{
"period": "day"
}
Réponse
{
"success": true,
"message": "Session statistics retrieved successfully",
"result": {
"overview": {
"totalActiveSessions": 450,
"uniqueActiveUsers": 320,
"newSessionsToday": 85,
"terminatedSessionsToday": 42
},
"byDeviceType": [
{"deviceType": "mobile", "count": 280},
{"deviceType": "web", "count": 150},
{"deviceType": "tablet", "count": 20}
],
"byLocation": [
{"country": "Cameroun", "count": 380},
{"country": "France", "count": 45},
{"country": "Côte d'Ivoire", "count": 25}
],
"sessionDuration": {
"average": "2.5 heures",
"median": "1.8 heures",
"longest": "8.2 heures"
},
"securityAlerts": {
"suspiciousLogins": 3,
"multipleDevices": 12,
"unusualLocations": 5
}
}
}
📊 Enums et Statuts
Statuts Utilisateur (UserStatus)
enum UserStatus {
ACTIVE = 'ACTIVE', // Actif
INACTIVE = 'INACTIVE', // Inactif
SUSPENDED = 'SUSPENDED', // Suspendu
DELETED = 'DELETED' // Supprimé
}
Rôles Utilisateur (UserRole)
enum UserRole {
CLIENT = 'CLIENT', // Client
DRIVER = 'DRIVER', // Chauffeur
ADMIN = 'ADMIN' // Administrateur
}
Types d'Appareil (DeviceType)
enum DeviceType {
MOBILE = 'mobile', // Mobile
WEB = 'web', // Navigateur web
TABLET = 'tablet', // Tablette
DESKTOP = 'desktop' // Ordinateur de bureau
}
🛡️ Fonctionnalités de Sécurité
1. Monitoring des Sessions
- Détection d'anomalies : Connexions suspectes
- Géolocalisation : Suivi des connexions
- Multi-device : Gestion des appareils multiples
- Terminaison forcée : Sécurité renforcée
2. Gestion des Comptes
- Suspension temporaire : Avec durée définie
- Vérification : Email et téléphone
- Historique d'activité : Traçabilité complète
- Alertes sécurité : Notifications automatiques
3. Analytics Avancées
- Engagement utilisateur : DAU, WAU, MAU
- Patterns d'utilisation : Heures de pointe
- Rétention : Analyse de fidélité
- Segmentation : Par rôle et comportement
💡 Exemples d'Utilisation
Suspendre un Utilisateur Problématique
{
"id": "user-problematic-001",
"statusData": {
"status": "SUSPENDED",
"reason": "Comportement abusif dans le forum",
"suspensionDuration": "14 days",
"comment": "Suspension suite à signalements multiples - révision dans 14 jours"
}
}
Terminer les Sessions Suspectes
{
"userId": "user-security-alert",
"reason": "Connexions depuis plusieurs pays simultanément - mesure de sécurité",
"excludeCurrentSession": true
}
Analyser l'Engagement Mensuel
{
"period": "month",
"includeEngagementMetrics": true,
"includeSecurityAlerts": true
}
🎯 Le module Users & Sessions offre une gestion complète des utilisateurs avec monitoring de sécurité avancé, analytics d'engagement et outils de modération pour maintenir un environnement sûr et performant.