# 👥 Système de Gestion des Utilisateurs - La Revenue Factory

## 📋 Vue d'ensemble

Le système de gestion des utilisateurs est une application web complète permettant de gérer les utilisateurs de La Revenue Factory avec toutes les fonctionnalités CRUD (Create, Read, Update, Delete).

## 🚀 Fonctionnalités

### ✨ Fonctionnalités principales
- **Création d'utilisateurs** avec validation complète
- **Modification** des informations utilisateur
- **Suppression** définitive des utilisateurs
- **Activation/Désactivation** des comptes
- **Recherche en temps réel** par nom, prénom ou email
- **Filtrage** par profil et statut
- **Statistiques** en temps réel
- **Interface responsive** (mobile-friendly)

### 🔧 Fonctionnalités techniques
- **API REST** complète
- **Validation côté client et serveur**
- **Gestion d'erreurs robuste**
- **Interface AJAX** sans rechargement de page
- **Architecture MVC** propre
- **Sécurité** des données

## 📁 Structure des fichiers

```
public/
├── gestion_utilisateurs.php    # Page principale
├── api_users.php              # API REST pour les opérations CRUD
├── test_users.php             # Page de test de la table
├── test_user_class.php        # Tests de la classe User
└── assets/
    ├── css/
    │   └── user-management.css # Styles CSS
    └── js/
        └── user-management.js  # JavaScript avancé

classes/
└── User.php                   # Classe de gestion des utilisateurs

config/
├── config.php                 # Configuration de la base de données
├── init.php                   # Initialisation
└── db_connect.php            # Connexion PDO
```

## 🗄️ Structure de la base de données

### Table `t_users`
| Colonne | Type | Contraintes | Description |
|---------|------|-------------|-------------|
| `user_id` | int | PRIMARY KEY, AUTO_INCREMENT | Identifiant unique |
| `user_name` | varchar(255) | NOT NULL | Nom de famille |
| `user_firstname` | varchar(255) | NOT NULL | Prénom |
| `user_mail` | varchar(255) | NOT NULL, UNIQUE | Adresse email |
| `user_profil` | enum | 'Super Admin', 'Admin', 'Consultant' | Profil utilisateur |
| `user_niveau` | enum | 'Junior', 'Confirmé', 'Senior', 'Expert' | Niveau d'expertise |
| `user_actif` | tinyint | DEFAULT 1 | Statut actif (1) ou inactif (0) |

## 🎯 Utilisation

### Accès à l'application
```
http://localhost:8080/gestion_utilisateurs.php
```

### Interface utilisateur

#### 📊 Tableau de bord
- **Statistiques** : Nombre total d'utilisateurs, actifs, inactifs, profils
- **Recherche** : Barre de recherche en temps réel
- **Filtres** : Par profil et statut
- **Actions** : Bouton "Nouvel Utilisateur"

#### 👤 Gestion des utilisateurs
- **Créer** : Bouton "Nouvel Utilisateur" → Modal de création
- **Modifier** : Bouton "✏️" → Modal de modification
- **Activer/Désactiver** : Bouton "⏸️/▶️"
- **Supprimer** : Bouton "🗑️" (avec confirmation)

### Raccourcis clavier
- `Ctrl + N` : Nouveau utilisateur
- `Échap` : Fermer le modal

## 🔌 API REST

### Endpoints disponibles

#### Créer un utilisateur
```http
POST /api_users.php
Content-Type: application/x-www-form-urlencoded

action=create
user_name=Dupont
user_firstname=Jean
user_mail=jean.dupont@example.com
user_profil=Consultant
user_niveau=Senior
user_actif=1
```

#### Modifier un utilisateur
```http
POST /api_users.php
Content-Type: application/x-www-form-urlencoded

action=update
user_id=1
user_name=Dupont
user_firstname=Jean
user_mail=jean.dupont@example.com
user_profil=Admin
user_niveau=Expert
user_actif=1
```

#### Supprimer un utilisateur
```http
POST /api_users.php
Content-Type: application/x-www-form-urlencoded

action=delete
user_id=1
```

#### Changer le statut
```http
POST /api_users.php
Content-Type: application/x-www-form-urlencoded

action=toggle_status
user_id=1
current_status=1
```

#### Rechercher des utilisateurs
```http
POST /api_users.php
Content-Type: application/x-www-form-urlencoded

action=search
search_term=jean
```

#### Obtenir les statistiques
```http
POST /api_users.php
Content-Type: application/x-www-form-urlencoded

action=get_stats
```

### Format des réponses
```json
{
    "success": true,
    "message": "Utilisateur créé avec succès",
    "data": {
        "user_id": 1,
        "user_name": "Dupont",
        "user_firstname": "Jean",
        "user_mail": "jean.dupont@example.com",
        "user_profil": "Consultant",
        "user_niveau": "Senior",
        "user_actif": 1
    },
    "timestamp": "2025-10-29 12:30:00"
}
```

## 🛠️ Classe User

### Méthodes principales

```php
// Instanciation
$userManager = new User($pdo);

// CRUD
$users = $userManager->getAllUsers();
$user = $userManager->getUserById(1);
$userManager->createUser($userData);
$userManager->updateUser(1, $userData);
$userManager->deleteUser(1);

// Gestion du statut
$userManager->activateUser(1);
$userManager->deactivateUser(1);

// Recherche et filtrage
$results = $userManager->searchUsers('jean');
$admins = $userManager->getUsersByProfil('Admin');
$seniors = $userManager->getUsersByNiveau('Senior');

// Validation
$errors = $userManager->validateUserData($userData);
$exists = $userManager->emailExists('test@example.com');

// Statistiques
$stats = $userManager->getStats();
```

### Constantes disponibles
```php
// Profils
User::PROFIL_SUPER_ADMIN  // 'Super Admin'
User::PROFIL_ADMIN        // 'Admin'
User::PROFIL_CONSULTANT   // 'Consultant'

// Niveaux
User::NIVEAU_JUNIOR       // 'Junior'
User::NIVEAU_CONFIRME     // 'Confirmé'
User::NIVEAU_SENIOR       // 'Senior'
User::NIVEAU_EXPERT       // 'Expert'
```

## ✅ Validation des données

### Règles de validation
- **Nom** : Requis, minimum 2 caractères
- **Prénom** : Requis, minimum 2 caractères
- **Email** : Requis, format valide, unique
- **Profil** : Requis, valeur dans l'enum
- **Niveau** : Requis, valeur dans l'enum
- **Statut** : Booléen (0 ou 1)

### Validation côté client
- Validation en temps réel lors de la saisie
- Vérification de l'unicité de l'email
- Messages d'erreur contextuels
- Prévention de la soumission si erreurs

### Validation côté serveur
- Validation complète avant insertion/modification
- Nettoyage des données (sanitization)
- Vérification des contraintes de base de données
- Messages d'erreur détaillés

## 🎨 Interface utilisateur

### Design
- **Couleurs** : Palette La Revenue Factory (bleus)
- **Typographie** : Segoe UI
- **Icons** : Emojis pour la compatibilité
- **Animations** : Transitions fluides
- **Responsive** : Adaptation mobile/tablette

### Composants
- **Cartes statistiques** avec animations
- **Tableau** avec tri et filtrage
- **Modal** moderne avec validation
- **Alertes** contextuelles
- **Boutons** avec états hover/focus

## 🔒 Sécurité

### Mesures implémentées
- **Validation** stricte des données
- **Échappement HTML** pour prévenir XSS
- **Requêtes préparées** pour prévenir l'injection SQL
- **Sanitization** des entrées utilisateur
- **Gestion d'erreurs** sécurisée (mode dev/prod)

## 📱 Responsive Design

### Breakpoints
- **Desktop** : > 768px
- **Tablet** : 768px - 480px
- **Mobile** : < 480px

### Adaptations mobiles
- Navigation simplifiée
- Tableau scrollable horizontalement
- Modal plein écran
- Boutons plus grands
- Grille de statistiques adaptée

## 🧪 Tests

### Pages de test disponibles
- `test_db.php` : Test de connexion base de données
- `test_users.php` : Analyse de la table utilisateurs
- `test_user_class.php` : Tests unitaires de la classe User

### Tests recommandés
1. **Connexion DB** : Vérifier la connectivité
2. **CRUD complet** : Créer, lire, modifier, supprimer
3. **Validation** : Tester les cas d'erreur
4. **Recherche** : Vérifier les filtres
5. **Responsive** : Tester sur différents écrans

## 🚀 Déploiement

### Prérequis
- PHP 8.0+
- MySQL 5.7+
- Serveur web (Apache/Nginx)

### Installation
1. Copier les fichiers dans le répertoire web
2. Configurer la base de données dans `config/config.php`
3. Créer la table `t_users` avec la structure fournie
4. Vérifier les permissions des fichiers
5. Tester la connexion avec `test_db.php`

### Configuration
```php
// config/config.php
define('DB_HOST', 'votre-host');
define('DB_NAME', 'votre-db');
define('DB_USER', 'votre-user');
define('DB_PASS', 'votre-password');
define('APP_ENV', 'prod'); // ou 'dev'
```

## 📞 Support

### Logs d'erreurs
- Mode développement : Erreurs affichées
- Mode production : Erreurs loggées uniquement

### Debugging
- Utiliser `APP_ENV = 'dev'` pour le debug
- Consulter les logs PHP
- Utiliser les outils de développement du navigateur

## 🔄 Évolutions futures

### Fonctionnalités prévues
- **Authentification** : Système de login
- **Permissions** : Gestion des droits par profil
- **Historique** : Log des modifications
- **Export** : CSV/Excel des utilisateurs
- **Import** : Import en masse
- **Photos** : Avatar des utilisateurs
- **Notifications** : Alertes par email

### Améliorations techniques
- **Cache** : Mise en cache des requêtes
- **Pagination** : Pour les grandes listes
- **API REST complète** : Endpoints GET/PUT/DELETE
- **Tests automatisés** : PHPUnit
- **Documentation API** : Swagger/OpenAPI

---

*Documentation générée le 29/10/2025 - La Revenue Factory*
