Début du projet
This commit is contained in:
commit
e7d4e607f6
23 files changed
+4855
No files matched your search
@@ -0,0 +1,53 @@
|
||||
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;
|
||||