REFONTE: Système RSS V2 - Réécriture complète

Problèmes résolus:
- Articles non mis à jour (toujours 12 nov au lieu de 14 nov)
- Détection de doublons défaillante
- Cache trop agressif bloquant les nouveaux articles
- Logique complexe et difficile à déboguer

Architecture V2 (simple et robuste):

**services/rss-scheduler-v2.js**
- Détection doublons SIMPLE: uniquement par lien
- Pas de double vérification titre+date (trop complexe)
- Nettoyage automatique (garde les 100 derniers)
- Logs clairs pour chaque étape
- Fetch séquentiel pour éviter les races
- Timeout robuste (15s par flux)

**routes/rss.routes-v2.js**
- Suppression du cache de 30s
- Requêtes SQL directes simples
- Pas de logique de filtre temporel compliquée
- Endpoint /refresh déclenche un fetch immédiat
- Logs cohérents

**Scripts utilitaires**
- reset-rss.js: Nettoie complètement la DB RSS
- migrate-to-rss-v2.js: Migre de V1 à V2
- Plus tous les scripts de debug existants

Backups:
- rss-scheduler.js.backup (ancien système)
- rss.routes.js.backup (ancien système)

Migration:
1. node scripts/reset-rss.js (optionnel, nettoie la DB)
2. Redémarrer le serveur
3. Ajouter les flux RSS via l'interface
4. Les articles seront récupérés toutes les 2 minutes

Résultat attendu:
- Les nouveaux articles apparaissent dans les 2 minutes
- Pas de doublons même avec liens changeants
- Affichage du plus récent au plus ancien
- Système simple, maintenable et debuggable
This commit is contained in:
Claude committed 2025-11-14 07:08:13 +00:00
1 parent f727e48848
commit 95e263dd3f
8 files changed
+1562 -278

No files matched your search

+62
View File
@@ -0,0 +1,62 @@
// Script de migration vers le nouveau système RSS V2
const fs = require('fs');
const path = require('path');
console.log('\n==================== MIGRATION RSS V2 ====================\n');
try {
// 1. Backup de l'ancien système
console.log('Backup de l\'ancien systeme...');
const oldScheduler = path.join(__dirname, '../services/rss-scheduler.js');
const oldRoutes = path.join(__dirname, '../routes/rss.routes.js');
if (fs.existsSync(oldScheduler)) {
fs.copyFileSync(oldScheduler, oldScheduler + '.backup');
console.log(' OK rss-scheduler.js -> rss-scheduler.js.backup');
}
if (fs.existsSync(oldRoutes)) {
fs.copyFileSync(oldRoutes, oldRoutes + '.backup');
console.log(' OK rss.routes.js -> rss.routes.js.backup');
}
console.log('');
// 2. Remplacer par les nouvelles versions
console.log('Installation du nouveau systeme...');
const newScheduler = path.join(__dirname, '../services/rss-scheduler-v2.js');
const newRoutes = path.join(__dirname, '../routes/rss.routes-v2.js');
if (fs.existsSync(newScheduler)) {
fs.copyFileSync(newScheduler, oldScheduler);
console.log(' OK rss-scheduler-v2.js -> rss-scheduler.js');
}
if (fs.existsSync(newRoutes)) {
fs.copyFileSync(newRoutes, oldRoutes);
console.log(' OK rss.routes-v2.js -> rss.routes.js');
}
console.log('');
console.log('Pour nettoyer la base de donnees RSS:');
console.log(' node scripts/reset-rss.js');
console.log('');
console.log('========================================================');
console.log('Migration terminee!');
console.log('');
console.log('Prochaines etapes:');
console.log('1. Redemarrez le serveur');
console.log('2. (Optionnel) Nettoyez la DB: node scripts/reset-rss.js');
console.log('3. Ajoutez vos flux RSS via l\'interface');
console.log('========================================================\n');
} catch (error) {
console.error('Erreur migration:', error);
process.exit(1);
}
process.exit(0);
+42
View File
@@ -0,0 +1,42 @@
// Script pour réinitialiser complètement le système RSS
const { runQuery, initDatabase } = require('../config/database');
async function resetRSS() {
console.log('\n==================== RESET SYSTÈME RSS ====================\n');
try {
await initDatabase();
// Supprimer tous les articles
console.log('🗑️ Suppression de tous les articles RSS...');
await runQuery('DELETE FROM rss_articles');
console.log('✓ Articles supprimés\n');
// Supprimer tous les flux
console.log('🗑️ Suppression de tous les flux RSS...');
await runQuery('DELETE FROM rss_feeds');
console.log('✓ Flux supprimés\n');
// Supprimer tous les résumés
console.log('🗑️ Suppression de tous les résumés...');
await runQuery('DELETE FROM rss_summaries');
console.log('✓ Résumés supprimés\n');
// Réinitialiser les séquences
console.log('🔄 Réinitialisation des compteurs...');
await runQuery('DELETE FROM sqlite_sequence WHERE name IN ("rss_articles", "rss_feeds", "rss_summaries")');
console.log('✓ Compteurs réinitialisés\n');
console.log('========================================================');
console.log('✅ Système RSS complètement réinitialisé!');
console.log('Vous pouvez maintenant ajouter de nouveaux flux.');
console.log('========================================================\n');
} catch (error) {
console.error('❌ Erreur:', error);
}
process.exit(0);
}
resetRSS();