mirror of
https://github.com/R0m1k3/noteflow.git
synced 2026-10-11 17:29:37 +02:00
Fix: Augmentation limites récupération articles RSS
- Augmente limite par défaut de 5 à 50 articles dans /api/rss/articles - Ajoute paramètre optionnel 'hours' pour filtrer par période (ex: ?hours=24) - Augmente limite de récupération par flux de 20 à 100 articles - Améliore le logging pour afficher les paramètres appliqués - Désactive le cache lors de l'utilisation du filtre temporel Résout le problème où toujours les mêmes articles étaient affichés malgré plus de 100 nouveaux articles disponibles dans les flux.
This commit is contained in:
2 files changed
+40
-17
No files matched your search
+38
-15
@@ -166,35 +166,58 @@ function invalidateCache() {
|
||||
|
||||
/**
|
||||
* GET /api/rss/articles
|
||||
* Récupérer les articles RSS (avec cache et paramètre limit)
|
||||
* Récupérer les articles RSS (avec cache et paramètres limit et hours)
|
||||
* @query limit - Nombre d'articles à récupérer (défaut: 50)
|
||||
* @query hours - Récupérer uniquement les articles des X dernières heures (défaut: tous)
|
||||
*/
|
||||
router.get('/articles', async (req, res) => {
|
||||
try {
|
||||
const limit = parseInt(req.query.limit) || 5;
|
||||
const limit = parseInt(req.query.limit) || 50; // Augmenté de 5 à 50
|
||||
const hours = parseInt(req.query.hours) || null;
|
||||
|
||||
// Utiliser le cache si disponible et récent
|
||||
const now = Date.now();
|
||||
if (articlesCache && (now - articlesCacheTime) < ARTICLES_CACHE_DURATION) {
|
||||
logger.debug('Articles RSS servis depuis le cache');
|
||||
return res.json(articlesCache.slice(0, limit));
|
||||
}
|
||||
|
||||
const articles = await getAll(`
|
||||
// Construire la requête SQL avec filtre temporel optionnel
|
||||
let query = `
|
||||
SELECT
|
||||
a.id, a.title, a.link, a.description, a.pub_date, a.content,
|
||||
COALESCE(f.title, f.url) as feed_title, f.url as feed_url
|
||||
FROM rss_articles a
|
||||
LEFT JOIN rss_feeds f ON a.feed_id = f.id
|
||||
WHERE a.pub_date IS NOT NULL
|
||||
`;
|
||||
|
||||
const params = [];
|
||||
|
||||
// Ajouter un filtre temporel si spécifié
|
||||
if (hours) {
|
||||
query += ` AND datetime(a.pub_date) >= datetime('now', '-${hours} hours')`;
|
||||
logger.debug(`Filtre appliqué: articles des ${hours} dernières heures`);
|
||||
}
|
||||
|
||||
query += `
|
||||
ORDER BY a.pub_date DESC
|
||||
LIMIT ?
|
||||
`, [limit]);
|
||||
`;
|
||||
params.push(limit);
|
||||
|
||||
// Mettre en cache
|
||||
articlesCache = articles || [];
|
||||
articlesCacheTime = now;
|
||||
// Ne pas utiliser le cache si un filtre temporel est appliqué
|
||||
if (!hours) {
|
||||
// Utiliser le cache si disponible et récent
|
||||
const now = Date.now();
|
||||
if (articlesCache && (now - articlesCacheTime) < ARTICLES_CACHE_DURATION) {
|
||||
logger.debug('Articles RSS servis depuis le cache');
|
||||
return res.json(articlesCache.slice(0, limit));
|
||||
}
|
||||
}
|
||||
|
||||
logger.info(`Articles RSS récupérés: ${articles?.length || 0}`);
|
||||
const articles = await getAll(query, params);
|
||||
|
||||
// Mettre en cache uniquement si pas de filtre temporel
|
||||
if (!hours) {
|
||||
articlesCache = articles || [];
|
||||
articlesCacheTime = Date.now();
|
||||
}
|
||||
|
||||
logger.info(`Articles RSS récupérés: ${articles?.length || 0} (limit: ${limit}${hours ? `, ${hours}h` : ''})`);
|
||||
res.json(articles || []);
|
||||
} catch (error) {
|
||||
logger.error('Erreur lors de la récupération des articles RSS:', error);
|
||||
|
||||
@@ -106,8 +106,8 @@ async function fetchAllFeeds() {
|
||||
[parsedFeed.title || feed.url, parsedFeed.description || '', feed.id]
|
||||
);
|
||||
|
||||
// Ajouter les articles (limiter à 20 par flux pour ne pas surcharger)
|
||||
const items = parsedFeed.items.slice(0, 20);
|
||||
// Ajouter les articles (limiter à 100 par flux pour capturer plus d'articles)
|
||||
const items = parsedFeed.items.slice(0, 100);
|
||||
let feedArticles = 0;
|
||||
|
||||
for (const item of items) {
|
||||
|
||||
Reference in new issue
Block a user