# 🗑️ Guide de Nettoyage de la Base de Données

## 📋 Vue d'ensemble

Ce guide vous permet de **supprimer toutes les données d'inscription et de suivi** pour repartir à zéro, tout en **conservant** :
- ✅ Les comptes étudiants (v2_students)
- ✅ Toutes les formations (v2_formations)
- ✅ Tout le contenu pédagogique (séances, leçons, phases, etc.)

---

## 🎯 Ce qui sera supprimé

| Table | Description | Impact |
|-------|-------------|--------|
| `v2_enrollments` | Inscriptions aux formations | Les étudiants devront se réinscrire |
| `v2_student_seance_progress` | Progrès dans les séances | Tout le suivi perdu |
| `v2_student_assessments` | Quiz et tests passés | Tous les résultats perdus |
| `v2_student_assessment_answers` | Réponses aux quiz | Toutes les réponses perdues |
| `v2_student_sessions` | Sessions étudiants | Liens sessions perdus |
| `v2_student_quiz_assignments` | Assignments de quiz | Assignments perdus |

---

## 📝 Procédure Recommandée

### Option 1 : Nettoyage Complet (Tous les étudiants)

#### Étape 1 : Vérification
```bash
Exécutez : cleanup_all_progress.sql (SANS décommenter les DELETE)
```

Cela affichera :
- Nombre d'inscriptions à supprimer
- Nombre de progrès à supprimer
- Liste des étudiants concernés

#### Étape 2 : Suppression
```bash
Exécutez : quick_cleanup.sql
```

Ou décommentez les lignes DELETE dans `cleanup_all_progress.sql`

---

### Option 2 : Nettoyage pour UN seul étudiant

Pour nettoyer uniquement **medtaki@gmail.com** par exemple :

```sql
START TRANSACTION;
SET FOREIGN_KEY_CHECKS = 0;

SET @student_id = (SELECT id FROM v2_students WHERE email = 'medtaki@gmail.com');

DELETE FROM v2_student_assessment_answers 
WHERE assessment_id IN (
    SELECT id FROM v2_student_assessments WHERE student_id = @student_id
);

DELETE FROM v2_student_assessments WHERE student_id = @student_id;
DELETE FROM v2_student_seance_progress WHERE student_id = @student_id;
DELETE FROM v2_student_sessions WHERE student_id = @student_id;
DELETE FROM v2_student_quiz_assignments WHERE student_id = @student_id;
DELETE FROM v2_enrollments WHERE student_id = @student_id;

-- Décrémenter les compteurs
UPDATE v2_formations f
SET student_count = GREATEST(student_count - 1, 0)
WHERE id IN (SELECT DISTINCT formation_id FROM v2_enrollments WHERE student_id = @student_id);

SET FOREIGN_KEY_CHECKS = 1;
COMMIT;
```

---

## 🔍 Vérification Post-Nettoyage

Après exécution, vérifiez avec :

```sql
-- Doit retourner 0 pour tout
SELECT 
    (SELECT COUNT(*) FROM v2_enrollments) as enrollments,
    (SELECT COUNT(*) FROM v2_student_seance_progress) as progress,
    (SELECT COUNT(*) FROM v2_student_assessments) as assessments;

-- Doit retourner le nombre d'étudiants et formations
SELECT 
    (SELECT COUNT(*) FROM v2_students) as students,
    (SELECT COUNT(*) FROM v2_formations) as formations,
    (SELECT COUNT(*) FROM v2_seances) as seances;
```

---

## 🚀 Recommencer le Suivi

Après nettoyage, les étudiants peuvent :

1. **Se réinscrire aux formations**
   ```http
   POST /api/formations/{id}/enroll
   ```

2. **Parcourir les séances**
   ```http
   GET /api/formations/{id}/sessions
   ```

3. **Marquer les progrès**
   ```http
   POST /api/seances/{id}/progress
   {
     "status": "completed",
     "progress_percentage": 100
   }
   ```

Le système calculera **automatiquement** le progrès grâce aux modifications apportées :
- ✅ `ProgressHelper.php` calcule le pourcentage
- ✅ Mise à jour auto après chaque séance complétée
- ✅ Progrès global recalculé à chaque appel API

---

## ⚠️ Points d'Attention

### Avant d'exécuter
1. 🔐 **SAUVEGARDEZ** votre base de données
2. 📊 Vérifiez les données avec le script de vérification
3. 🧪 Testez d'abord sur une copie de la base

### Après exécution
1. ✅ Vérifiez que les tables sont vides
2. ✅ Vérifiez que les étudiants et formations sont préservés
3. 🔄 Les compteurs `student_count` doivent être à 0

---

## 📂 Fichiers Créés

1. [`cleanup_all_progress.sql`](file:///c:/Users/semah/StudioProjects/irtiqaa_ag/backend/migrations/cleanup_all_progress.sql) - Script complet avec vérifications
2. [`quick_cleanup.sql`](file:///c:/Users/semah/StudioProjects/irtiqaa_ag/backend/migrations/quick_cleanup.sql) - Script rapide pour exécution directe

---

## 🎓 Exemple : Cas d'Usage

### Situation
Vous avez testé le système avec plusieurs étudiants et voulez repartir à zéro pour la production.

### Solution
1. Exécutez `cleanup_all_progress.sql` (mode vérification)
2. Confirmez les données à supprimer
3. Exécutez `quick_cleanup.sql`
4. Vérifiez les résultats
5. Les étudiants se réinscrivent via l'app Flutter
6. Le nouveau système de calcul de progrès fonctionne automatiquement

---

## 💡 Conseil

Après nettoyage, pensez à exécuter également `recalculate_progress.sql` la première fois qu'un étudiant complète une séance pour vérifier que le calcul automatique fonctionne correctement.
