# 💰 Comparatif Solutions de Modération Automatique

## 🎯 Objectif
Bloquer automatiquement les contenus inappropriés (haine, violence, harcèlement, contenu sexuel) lors de la création de fails et commentaires, **sans coût** pour FailDaily.

---

## 🏆 Solution Retenue : OpenAI Moderation API

### ✅ Avantages
- **GRATUIT** (pas de limite publique documentée)
- Très précis pour détecter 7 catégories :
  - `hate` : Discours haineux
  - `hate/threatening` : Menaces haineuses
  - `harassment` : Harcèlement
  - `harassment/threatening` : Harcèlement menaçant
  - `self-harm` : Automutilation
  - `sexual` : Contenu sexuel
  - `violence` : Violence
- Réponse ultra-rapide (~100ms)
- Multilingue (français inclus)
- Pas besoin de carte bancaire
- API simple (1 endpoint)

### ⚠️ Limites
- Dépendance à un service externe (mais graceful degradation)
- Pas de personnalisation des catégories
- Pas de contexte communautaire (ne connaît pas vos règles spécifiques)

### 💻 Implémentation
```javascript
const response = await axios.post(
  'https://api.openai.com/v1/moderations',
  { input: "texte à modérer" },
  { headers: { 'Authorization': `Bearer ${OPENAI_API_KEY}` } }
);

if (response.data.results[0].flagged) {
  // Bloquer le contenu
}
```

### 📊 Coût Estimé
- **0€/mois** pour FailDaily
- Limite théorique : ~60 requêtes/minute (non confirmé officiellement)
- Si 1000 fails/jour → **0€**
- Si 10000 commentaires/jour → **0€**

---

## 🥈 Alternative 1 : Perspective API (Google)

### ✅ Avantages
- Gratuit jusqu'à 1 million de requêtes/jour
- Très bonne détection de toxicité
- Scores de confiance détaillés (0 à 1)
- Open source (Jigsaw)

### ❌ Inconvénients
- Configuration plus complexe (projet Google Cloud)
- Moins de catégories que OpenAI
- Moins précis sur le français
- Nécessite carte bancaire pour projet GCP (même si gratuit)

### 💻 Implémentation
```javascript
const response = await axios.post(
  `https://commentanalyzer.googleapis.com/v1alpha1/comments:analyze?key=${API_KEY}`,
  {
    comment: { text: "texte à modérer" },
    languages: ["fr"],
    requestedAttributes: { TOXICITY: {}, SEVERE_TOXICITY: {} }
  }
);

if (response.data.attributeScores.TOXICITY.summaryScore.value > 0.7) {
  // Bloquer
}
```

### 📊 Coût
- **0€** jusqu'à 1M requêtes/jour
- Au-delà : contactez Google

---

## 🥉 Alternative 2 : AWS Comprehend

### ✅ Avantages
- Détection de sentiment précise
- Scalable
- Intégration AWS

### ❌ Inconvénients
- **PAYANT** dès la 1ère requête
- Complexe (nécessite compte AWS)
- Pas spécialisé modération (plutôt analyse sentiment)

### 💻 Implémentation
```javascript
const params = {
  Text: "texte à modérer",
  LanguageCode: 'fr'
};
const result = await comprehend.detectSentiment(params).promise();
```

### 📊 Coût
- **0,0001€ par requête** (100 caractères)
- 1000 fails/jour = **0,10€/jour** = **36€/an**
- 10000 commentaires/jour = **1€/jour** = **365€/an**

❌ **Trop cher pour application gratuite**

---

## 🔧 Alternative 3 : Liste Noire de Mots-Clés (Fait Maison)

### ✅ Avantages
- **GRATUIT** (pas d'API externe)
- Instantané (pas de latence réseau)
- Contrôle total
- Fonctionne offline

### ❌ Inconvénients
- Faux positifs (exemple : "tuer le temps")
- Faux négatifs (contournement facile : "h@ine")
- Maintenance manuelle de la liste
- Pas de compréhension contextuelle

### 💻 Implémentation
```javascript
const blacklist = [
  'connard', 'salope', 'fils de pute',
  'va te pendre', 'je vais te tuer',
  // ... 500+ mots
];

function containsBlacklistedWord(text) {
  const normalized = text.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "");
  return blacklist.some(word => normalized.includes(word));
}
```

### 📊 Coût
- **0€**

⚠️ **Recommandé en COMPLÉMENT d'OpenAI, pas en remplacement**

---

## 🎯 Stratégie Hybride Recommandée

### Niveau 1 : Filtre Rapide (Blacklist)
- Blocage instantané mots grossiers évidents
- Coût : 0€
- Latence : <1ms

### Niveau 2 : IA (OpenAI Moderation)
- Si passe Niveau 1, analyse IA complète
- Coût : 0€
- Latence : ~100ms

### Niveau 3 : Signalements Utilisateurs
- Si passe Niveau 1+2, utilisateurs peuvent signaler
- Modération manuelle admin
- Coût : 0€

---

## 📋 Tableau Comparatif

| Critère | OpenAI Moderation | Perspective API | AWS Comprehend | Blacklist |
|---------|-------------------|-----------------|----------------|-----------|
| **Coût** | 0€ | 0€ (limité) | ~400€/an | 0€ |
| **Précision** | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ |
| **Vitesse** | ~100ms | ~200ms | ~300ms | <1ms |
| **Français** | ✅ Excellent | ⚠️ Moyen | ✅ Bon | ✅ Parfait |
| **Facilité** | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐⭐ |
| **Maintenance** | Aucune | Aucune | Aucune | ⚠️ Manuelle |

---

## 🚀 Mise en Production

### Configuration Minimale (Recommandé)

**Backend `.env`** :
```env
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
```

**Fichiers modifiés** :
- `backend-api/src/services/moderationService.js` (service principal)
- `backend-api/src/controllers/failsController.js` (modération fails)
- `backend-api/src/controllers/commentsController.js` (modération commentaires)

**Installation** :
```bash
npm install axios
```

### Test Local

```bash
# Créer compte OpenAI et obtenir clé gratuite
# https://platform.openai.com/api-keys

# Ajouter dans .env
echo "OPENAI_API_KEY=sk-xxx" >> backend-api/.env

# Tester
node backend-api/test-moderation.js
```

### Déploiement OVH

```bash
# SSH sur serveur
ssh ubuntu@141.94.42.172

# Éditer docker-compose.ovh.yml
nano /home/taaazzz/FailDaily/docker/docker-compose.ovh.yml

# Ajouter dans backend.environment :
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

# Redémarrer
cd /home/taaazzz/FailDaily/docker
docker-compose -f docker-compose.ovh.yml restart backend
```

---

## 📊 Monitoring

### Logs de Modération Bloquée

```sql
-- Fails bloqués
SELECT 
  created_at,
  details->>'$.title' as titre,
  details->>'$.categories' as raisons
FROM system_logs
WHERE action = 'fail_blocked_moderation'
ORDER BY created_at DESC
LIMIT 20;

-- Commentaires bloqués
SELECT 
  created_at,
  user_id,
  details->>'$.categories' as raisons
FROM system_logs
WHERE action = 'comment_blocked_moderation'
ORDER BY created_at DESC
LIMIT 20;
```

### Statistiques Mensuelles

```sql
SELECT 
  DATE_FORMAT(created_at, '%Y-%m') as mois,
  COUNT(*) as total_blocked,
  SUM(CASE WHEN action = 'fail_blocked_moderation' THEN 1 ELSE 0 END) as fails_blocked,
  SUM(CASE WHEN action = 'comment_blocked_moderation' THEN 1 ELSE 0 END) as comments_blocked
FROM system_logs
WHERE action IN ('fail_blocked_moderation', 'comment_blocked_moderation')
GROUP BY DATE_FORMAT(created_at, '%Y-%m')
ORDER BY mois DESC;
```

---

## 🔮 Évolution Future

### Si Volume Augmente (>100K requêtes/jour)

1. **Ajouter cache Redis** :
   - Hash du contenu → résultat modération
   - TTL 30 jours
   - Évite re-modérer même contenu

2. **Queue asynchrone** :
   - Modérer en arrière-plan pour certains contenus
   - Validation immédiate blacklist, IA en différé

3. **ML custom** :
   - Entraîner modèle sur vos propres données
   - Hébergement local (0€)
   - Nécessite expertise ML

---

**Conclusion** : OpenAI Moderation API est **parfait** pour FailDaily : gratuit, précis, rapide, zéro maintenance. ✅
