Files
veille-tech-aggregator/app/routes/public.js
T
2026-10-25 20:05:12 +01:00

54 lines
1.7 KiB
JavaScript

const express = require('express');
const router = express.Router();
const { db } = require('../db');
router.get('/', (req, res) => {
const category = req.query.category;
const sort = req.query.sort || 'desc';
const lang = req.query.lang;
let query = `SELECT * FROM articles WHERE status = 'published'`;
const params = [];
if (category) {
query += ` AND categories LIKE ?`;
params.push(`%"${category}"%`);
}
if (lang) {
query += ` AND COALESCE(language, source_language, 'fr') = ?`;
params.push(lang);
}
query += ` ORDER BY datetime(published_at) ${sort === 'asc' ? 'ASC' : 'DESC'}, datetime(created_at) DESC`;
const articles = db.prepare(query).all(...params);
// Récupérer les catégories uniques
let catQuery = `SELECT categories FROM articles WHERE status = 'published' AND categories IS NOT NULL`;
const catParams = [];
if (lang) {
catQuery += ` AND COALESCE(language, source_language, 'fr') = ?`;
catParams.push(lang);
}
const allArticles = db.prepare(catQuery).all(...catParams);
const categoriesSet = new Set();
allArticles.forEach(a => {
try {
const cats = JSON.parse(a.categories);
if (Array.isArray(cats)) {
cats.forEach(c => categoriesSet.add(c));
}
} catch(e) {}
});
const categories = Array.from(categoriesSet).sort();
// Récupérer les langues disponibles
const langRows = db.prepare(`SELECT DISTINCT COALESCE(language, source_language, 'fr') as lang FROM articles WHERE status = 'published' ORDER BY lang`).all();
const languages = langRows.map(r => r.lang).filter(Boolean);
res.render('index', { articles, categories, selectedCategory: category, sort, languages, selectedLang: lang });
});
module.exports = router;