FailDaily – ToDo issu de ANALYSE_COMPLETE_APPLICATION.md (corrigé)
================================================================

Critique (à traiter en priorité)
--------------------------------
- [x] Emails : SMTP OVH configuré (ssl0.ovh.net + user/pass), mailer opérationnel.
- [x] Consentements COPPA : persistance en base (`user_consents` + routes `/api/consents`) et front branché (ConsentService -> API).
- [x] Follow : routes backend `/api/follows` + endpoints followers/following (implémentés) + tests (`tests/follows.routes.test.js`).
- [x] Tokens : stockage sécurisé via Capacitor Preferences (fallback localStorage) dans MysqlService.

Important
---------
- [x] Push : FCM activable via backend (`utils/push.js` + env FCM_SERVER_KEY) et service front intégré (Capacitor PushNotifications, enregistrement token via `/api/push/register`).
- [/] Upload images : compression + resize côté front (canvas) + backend Sharp (orig/med/thumb, avatars full/thumb) + headers cache longs (1 an, immutable). Reste à faire : brancher Cloudflare CDN (à faire plus tard).
- [ ] Cache : intégrer Redis pour les requêtes publiques (fails, profils, badges/config
- [x] Avatars : UI simplifiée (caméra/galerie/fichier + avatars par défaut), redimensionnement serveur Sharp (512px/150px). Plus de canvas editor complexe.
- [x] Fails "publics" : visibilité réservée aux utilisateurs authentifiés (routes protégées) + anonymisation appliquée si `is_anonyme` (nom/avatar masqués).

Qualité et tests
----------------
- [ ] Backend : ajouter des tests pour commentaires, upload, modération, routes admin (follow + consents couverts).
- [ ] Frontend : étoffer les specs unitaires et ajouter des E2E (Cypress) couvrant auth, post de fail, réactions/commentaires, follow.
- [ ] Performances : revisiter la section performance après ajout compression/CDN/cache.

Stratégique / clarification
---------------------------
- [x] **IA / Modération Automatique** : ✅ **IMPLÉMENTÉ (28 Déc 2024)**
  - Solution : **OpenAI Moderation API (100% GRATUIT)**
  - Modération en temps réel sur fails et commentaires
  - Détection automatique : haine, violence, contenu sexuel, harcèlement
  - Performance : ~100ms par requête, graceful degradation si API offline
  - Documentation : `/docs/guides/MODERATION_AUTOMATIQUE.md`
  - Fichiers : `moderationService.js`, `failsController.js`, `commentsController.js`

Panel Admin - Gestion Base de Données
--------------------------------------

### ✅ Fonctionnalités existantes (vérifiées dans le code)

**Opérations de vidage/reset :**
- ✅ Truncate table individuelle avec confirmation (`truncateTable()` - ligne 1281)
- ✅ Truncate table AUTH avec double confirmation "DELETE" (`truncateAuthTable()` - ligne 1305)
- ✅ Truncate toutes les tables APP (15 tables : fails, reactions, comments, profiles, badges, logs, etc.) (`truncateAllAppTables()` - ligne 1339)
- ✅ Truncate toutes les tables AUTH (users, user_preferences, parental_consents) avec confirmation "DELETE ALL" (`truncateAllAuthTables()` - ligne 1367)
- ✅ Reset complet de la base avec confirmation "RESET ALL DATA" - préserve les badges (`truncateEverything()` - ligne 1398)
- ✅ Suppression de tous les utilisateurs avec confirmation (`deleteAllUsers()` - ligne 1556)
- ✅ Truncate rapide des logs (system_logs, activity_logs, reaction_logs, error_logs, push_errors) (`quickTruncateLogs()` - ligne 1515)
- ✅ Restauration d'urgence des configurations essentielles (`emergencyRestoreConfigurations()` - ligne 1643)

**Analyse et monitoring :**
- ⚠️ **NON FONCTIONNEL** : Analyse complète de la base (`analyzeDatabase()` - admin.page.ts ligne 224)
  - Frontend appelle `AdminService.analyzeDatabaseIntegrity()` (admin.service.ts ligne 135)
  - AdminService appelle `MysqlService.analyzeDatabaseIntegrity()` (mysql.service.ts ligne 1788)
  - **PROBLÈME** : MysqlService.analyzeDatabaseIntegrity() est un **stub** qui retourne toujours une erreur
  - **PROBLÈME** : Aucun endpoint backend `/api/admin/analyze-database` n'existe
  - **Conséquence** : Le bouton "Analyser la base de données" affiche systématiquement "analyse indisponible"
- ⚠️ **NON FONCTIONNEL** : Méthodes de correction (stubs dans mysql.service.ts lignes 2288-2305)
  - `analyzeSpecificFail()` : retourne toujours erreur
  - `fixInvalidReactionCounts()` : lance exception
  - `deleteOrphanedReaction()` : lance exception
  - **Conséquence** : Les boutons "Analyser" et "Corriger" des fails problématiques ne fonctionnent pas
- ✅ Compteurs de lignes par table (`dbCounts` - ligne 95) - **FONCTIONNE** si endpoint backend existe
- ✅ Historique des opérations truncate (`truncateResults` - ligne 94) - **FONCTIONNE**

**Endpoints backend (admin.js) :**
- ✅ `POST /api/admin/tables/:tableName/truncate` - Vider une table (ligne 1296)
- ✅ `POST /api/admin/tables/bulk-truncate` - Vider plusieurs tables (ligne 1379)
- ✅ `POST /api/admin/reset/complete` - Reset complet de la base (ligne 1511)
- ✅ Whitelist de sécurité pour tables autorisées
- ✅ Logs d'audit pour toutes les opérations destructives

**Services frontend (mysql.service.ts) :**
- ✅ `truncateTable(tableName, isAuthTable)` - Ligne 1797
- ✅ `bulkTruncateTables(tables, isAuthTables)` - Ligne 1816
- ✅ `resetComplete()` - Appel endpoint reset complet
- ✅ `deleteAllAuthUsers()` - Suppression RPC utilisateurs

**Interface utilisateur (admin.page.html) :**
- ✅ Segment dédié "database" dans le panel admin (ligne 40)
- ⚠️ Bouton "Analyser la base de données" (ligne 104) - **UI existe mais backend non implémenté**
- ⚠️ Affichage des statistiques globales (profils, fails, réactions, logs) - **UI existe mais toujours vide**
- ⚠️ Section intégrité avec alertes visuelles (icônes warning/success) - **UI existe mais pas de données**
- ⚠️ Liste des fails problématiques avec boutons corriger/analyser (ligne 273) - **Boutons présents mais non fonctionnels**
- ⚠️ Recommandations automatiques basées sur l'analyse - **Toujours vide (aucune donnée)**

### ❌ Fonctionnalités manquantes (type phpMyAdmin)

**Visualisation des données :**
- [ ] Liste complète de toutes les tables de la base (pas seulement compteurs)
- [ ] Vue de la structure des tables (colonnes, types, clés, indexes)
- [ ] Browsing des données : parcourir les lignes d'une table sélectionnée
- [ ] Pagination pour tables volumineuses (50/100/500 lignes par page)
- [ ] Recherche/filtre dans les données d'une table
- [ ] Tri par colonnes (ASC/DESC)

**Édition CRUD :**
- [ ] Ajouter un nouvel enregistrement (formulaire dynamique basé sur structure table)
- [ ] Éditer une ligne existante (modal ou inline editing)
- [ ] Supprimer un enregistrement spécifique (avec confirmation)
- [ ] Suppression multiple (sélection checkbox + action groupée)
- [ ] Validation des types de données avant insertion/update

**Import/Export :**
- [ ] Export table en CSV (toutes les lignes ou filtrées)
- [ ] Export table en JSON
- [ ] Export de la structure SQL (CREATE TABLE)
- [ ] Import CSV avec mapping des colonnes
- [ ] Import JSON avec validation
- [ ] Backup/restore d'une table individuelle

**Requêtes SQL :**
- [ ] Éditeur SQL avec coloration syntaxique
- [ ] Exécution de requêtes SELECT personnalisées
- [ ] Historique des requêtes exécutées
- [ ] Favoris de requêtes fréquentes
- [ ] Limitations de sécurité (READ ONLY sauf admin, pas de DROP/ALTER)

**Fonctionnalités avancées :**
- [ ] Copier une table (structure + données)
- [ ] Renommer une table
- [ ] Vider une table avec confirmation (existe déjà)
- [ ] Optimiser les tables (OPTIMIZE TABLE)
- [ ] Réparer les tables (REPAIR TABLE pour MyISAM)
- [ ] Voir les index et leur utilisation
- [ ] Statistiques de taille (tables + index)

**Production readiness :**
- [ ] **Mode "Production Reset"** : bouton dédié avec workflow complet
  - [ ] Backup automatique avant reset
  - [ ] Confirmation triple pour éviter erreurs
  - [ ] Liste des tables à préserver (legal_documents, badges)
  - [ ] Rapport post-reset (tables vidées, lignes supprimées)
  - [ ] Vérification intégrité après reset
  - [ ] Restauration des configurations par défaut
- [ ] Audit trail : log de TOUTES les modifications de données (qui/quand/quoi)
- [ ] Notifications email à super_admin pour opérations critiques
- [ ] Système de rollback (garder backup des 5 dernières opérations)

### 🎯 Priorités pour production

**⚠️ CORRECTIONS URGENTES (bugs actuels à corriger avant utilisation) :**

1. **Whitelist tables incomplète** - ✅ CORRIGÉ
   - Problème : `truncateAllAppTables()` envoyait des tables non autorisées (app_config, user_points, etc.)
   - Impact : Erreur 400 "Tables non autorisées", rien n'était vidé
   - Solution : Ajout de 7 tables manquantes dans la whitelist backend (admin.js ligne 1390)

2. **Analyse de base non fonctionnelle** - ❌ À CORRIGER
   - Problème : `analyzeDatabaseIntegrity()` est un stub qui retourne toujours une erreur
   - Impact : Le bouton "Analyser la base de données" ne fonctionne jamais
   - Solution : Implémenter l'endpoint backend `/api/admin/analyze-database` avec :
     - Comptage des enregistrements par table
     - Détection des réactions orphelines (reactions sans fail_id valide)
     - Détection des profils sans email
     - Détection des compteurs incohérents (fail.reactions_count != COUNT réel)
     - Statistiques globales et recommandations

3. **Méthodes de correction non implémentées** - ❌ À CORRIGER
   - Problème : `analyzeSpecificFail()`, `fixInvalidReactionCounts()`, `deleteOrphanedReaction()` sont des stubs
   - Impact : Les boutons "Analyser" et "Corriger" sur les fails problématiques ne fonctionnent pas
   - Solution : Implémenter les endpoints backend correspondants :
     - `POST /api/admin/fails/:id/analyze` : analyse détaillée d'un fail
     - `POST /api/admin/fails/:id/fix-counts` : recalcul des compteurs
     - `DELETE /api/admin/reactions/:id/orphaned` : suppression réaction orpheline

4. **Partitions Realtime non gérées** - ⚠️ À DÉCIDER
   - Problème : `truncateRealtimePartitions()` envoie des tables `realtime.messages_*` non whitelistées
   - Impact : Erreur 400 si l'utilisateur clique sur ce bouton
   - Solution : Soit ajouter les tables realtime à la whitelist, soit supprimer cette fonctionnalité

**🚀 NOUVELLES FONCTIONNALITÉS (après corrections des bugs) :**

1. **URGENT - Production Reset Tool** :
   - Interface dédiée "Préparer Production" avec workflow guidé
   - Backup automatique avant toute opération destructive
   - Reset sélectif (cocher les tables à vider)
   - Vérification post-reset automatique

2. **IMPORTANT - Visualisation de base** :
   - Liste des tables avec row counts actualisés
   - Browse data pour les 20 tables principales
   - Édition rapide des enregistrements critiques

3. **NICE TO HAVE - Fonctionnalités avancées** :
   - Export/Import CSV
   - Éditeur SQL (lecture seule d'abord)
   - Optimisation des tables
