diff --git a/backend/server.js b/backend/server.js index c7d519d..440419a 100644 --- a/backend/server.js +++ b/backend/server.js @@ -270,7 +270,10 @@ class TextService { // Filtres if (filters.category) { - results = results.filter(text => text.metadata.categorie === filters.category) + const categoryLower = filters.category.toLowerCase() + results = results.filter(text => + text.metadata.categorie?.toLowerCase() === categoryLower + ) } if (filters.difficulty) { @@ -285,7 +288,7 @@ class TextService { } /** - * NOUVEAU : Obtient toutes les catégories disponibles + * NOUVEAU : Obtient toutes les catégories disponibles (normalisées en minuscules) */ async getCategories() { const allTexts = await this.scanTexts() @@ -293,7 +296,8 @@ class TextService { for (const text of allTexts) { if (text.metadata.categorie) { - categories.add(text.metadata.categorie) + // Normaliser en minuscules + categories.add(text.metadata.categorie.toLowerCase()) } } @@ -404,6 +408,19 @@ app.get('/api/stats', async (req, res) => { } }) +/** + * GET /api/categories - Liste des catégories disponibles + */ +app.get('/api/categories', async (req, res) => { + try { + const categories = await textService.getCategories() + res.json(categories) + } catch (error) { + console.error('Erreur GET /api/categories:', error) + res.status(500).json({ error: 'Erreur lors du chargement des catégories' }) + } +}) + /** * GET /api/texts/:id/audio - Fichier audio */ @@ -439,6 +456,7 @@ app.listen(PORT, () => { console.log(` GET /api/texts/:id - Détails d'un texte`) console.log(` GET /api/random - Texte aléatoire`) console.log(` GET /api/stats - Statistiques`) + console.log(` GET /api/categories - Liste des catégories`) console.log(` GET /api/texts/:id/audio - Fichier audio`) }) diff --git a/src/components/FooterComponent.vue b/src/components/FooterComponent.vue index 1445de6..f65083a 100644 --- a/src/components/FooterComponent.vue +++ b/src/components/FooterComponent.vue @@ -1,6 +1,23 @@