mirror of
https://github.com/R0m1k3/noteflow.git
synced 2026-10-24 15:48:16 +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
|
* 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) => {
|
router.get('/articles', async (req, res) => {
|
||||||
try {
|
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
|
// Construire la requête SQL avec filtre temporel optionnel
|
||||||
const now = Date.now();
|
let query = `
|
||||||
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(`
|
|
||||||
SELECT
|
SELECT
|
||||||
a.id, a.title, a.link, a.description, a.pub_date, a.content,
|
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
|
COALESCE(f.title, f.url) as feed_title, f.url as feed_url
|
||||||
FROM rss_articles a
|
FROM rss_articles a
|
||||||
LEFT JOIN rss_feeds f ON a.feed_id = f.id
|
LEFT JOIN rss_feeds f ON a.feed_id = f.id
|
||||||
WHERE a.pub_date IS NOT NULL
|
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
|
ORDER BY a.pub_date DESC
|
||||||
LIMIT ?
|
LIMIT ?
|
||||||
`, [limit]);
|
`;
|
||||||
|
params.push(limit);
|
||||||
|
|
||||||
// Mettre en cache
|
// Ne pas utiliser le cache si un filtre temporel est appliqué
|
||||||
articlesCache = articles || [];
|
if (!hours) {
|
||||||
articlesCacheTime = now;
|
// 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 || []);
|
res.json(articles || []);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error('Erreur lors de la récupération des articles RSS:', 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]
|
[parsedFeed.title || feed.url, parsedFeed.description || '', feed.id]
|
||||||
);
|
);
|
||||||
|
|
||||||
// Ajouter les articles (limiter à 20 par flux pour ne pas surcharger)
|
// Ajouter les articles (limiter à 100 par flux pour capturer plus d'articles)
|
||||||
const items = parsedFeed.items.slice(0, 20);
|
const items = parsedFeed.items.slice(0, 100);
|
||||||
let feedArticles = 0;
|
let feedArticles = 0;
|
||||||
|
|
||||||
for (const item of items) {
|
for (const item of items) {
|
||||||
|
|||||||
Reference in new issue
Block a user