# 🔒 Configuration Modération Automatique FailDaily

## ✅ Solution Mise en Place : OpenAI Moderation API (GRATUIT)

### 📋 Caractéristiques

- **Coût** : 100% GRATUIT (pas de limite documentée)
- **Précision** : Détection de contenu inapproprié par IA
- **Vitesse** : ~100ms par requête
- **Catégories détectées** :
  - `hate` : Discours haineux, discrimination
  - `sexual` : Contenu sexuel
  - `violence` : Violence, automutilation
  - `self-harm` : Automutilation
  - `harassment` : Harcèlement

### 🚀 Installation

#### 1. Obtenir la clé API (GRATUITE)

1. Aller sur [platform.openai.com](https://platform.openai.com/signup)
2. Créer un compte gratuit
3. Aller dans [API Keys](https://platform.openai.com/api-keys)
4. Créer une nouvelle clé secrète
5. Copier la clé (commence par `sk-...`)

#### 2. Configuration Locale

Ajouter dans `backend-api/.env` :

```env
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
```

#### 3. Configuration Production (OVH)

SSH sur le serveur et ajouter la clé :

```bash
ssh ubuntu@141.94.42.172
cd /home/taaazzz/FailDaily/docker
nano docker-compose.ovh.yml
```

Ajouter dans la section `backend.environment` :

```yaml
services:
  backend:
    environment:
      - OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
```

Redémarrer le backend :

```bash
docker-compose -f docker-compose.ovh.yml restart backend
```

### 📦 Installation Dépendance

```bash
cd backend-api
npm install axios
```

### 🧪 Test de Modération

Créer un fail ou commentaire avec :
- ❌ "Je te déteste, tu es nul" → **BLOQUÉ**
- ❌ Contenu sexuel explicite → **BLOQUÉ**
- ❌ Incitation à la violence → **BLOQUÉ**
- ✅ "J'ai raté mon examen" → **AUTORISÉ**

### 📊 Fonctionnement

#### Fails
- Modération sur `title` + `description` avant création
- Si flaggé : erreur 400 avec message "Contenu inapproprié détecté"
- Log dans `system_logs` avec `action='fail_blocked_moderation'`

#### Commentaires
- Modération sur `content` avant création
- Si flaggé : erreur 400 avec code `MODERATION_REJECTED`
- Log dans `system_logs` avec `action='comment_blocked_moderation'`

### 🔧 Maintenance

#### Désactiver Temporairement
Retirer la variable `OPENAI_API_KEY` → La modération sera en mode bypass (tout autorisé)

#### Logs de Modération
```sql
SELECT * FROM system_logs 
WHERE action IN ('fail_blocked_moderation', 'comment_blocked_moderation')
ORDER BY created_at DESC
LIMIT 50;
```

#### Statistiques
```sql
-- Nombre de contenus bloqués par jour
SELECT 
  DATE(created_at) as date,
  COUNT(*) as blocked_count,
  action
FROM system_logs
WHERE action IN ('fail_blocked_moderation', 'comment_blocked_moderation')
GROUP BY DATE(created_at), action
ORDER BY date DESC;
```

### 🆚 Alternatives (si besoin futur)

| Solution | Coût | Avantages | Inconvénients |
|----------|------|-----------|---------------|
| **OpenAI Moderation** | **GRATUIT** | Précis, rapide, gratuit | Dépend API externe |
| Perspective API (Google) | Gratuit (limité) | Bonne détection toxicité | Limites quotidiennes |
| AWS Comprehend | ~0.0001$/requête | Multilingue | Coût par usage |
| Keywords blacklist | Gratuit | Instantané | Faux positifs/négatifs |

### 📝 Fichiers Modifiés

- `backend-api/src/services/moderationService.js` (CRÉÉ)
- `backend-api/src/controllers/failsController.js` (ligne 80)
- `backend-api/src/controllers/commentsController.js` (ligne 130)

### ⚡ Performance

- Latence ajoutée : ~100-150ms par création
- Pas d'impact sur lecture de fails/commentaires
- Graceful degradation : si API hors ligne → bypass (autorise tout)

### 🔐 Sécurité

- Clé API stockée en variable d'environnement (jamais dans code)
- Timeout de 5s pour éviter blocages
- Logs sécurisés (contenu flaggé loggé mais pas stocké en clair)

---

**Date d'implémentation** : 28 Décembre 2024  
**Statut** : ✅ Production Ready
