
- Refonte complète du design avec système de panneaux latéraux rétractables - Ajout de templates de projets par domaine (recherche, informatique, mathématiques, etc.) - Implémentation système d'export PDF avec Puppeteer - Amélioration de l'API REST avec nouvelles routes d'export et templates - Ajout de JavaScript client pour interactions dynamiques - Configuration environnement étendue pour futures fonctionnalités IA - Amélioration responsive design et expérience utilisateur 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
117 lines
2.9 KiB
JavaScript
117 lines
2.9 KiB
JavaScript
const express = require('express');
|
|
const router = express.Router();
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
// GET /api/templates/:domain/:level - Récupérer un template spécifique
|
|
router.get('/:domain/:level', (req, res) => {
|
|
const { domain, level } = req.params;
|
|
|
|
try {
|
|
const templatePath = path.join(__dirname, '../templates', domain, `${level}.md`);
|
|
|
|
if (!fs.existsSync(templatePath)) {
|
|
return res.status(404).json({
|
|
success: false,
|
|
error: `Template non trouvé : ${domain}/${level}`
|
|
});
|
|
}
|
|
|
|
const templateContent = fs.readFileSync(templatePath, 'utf8');
|
|
|
|
res.json({
|
|
success: true,
|
|
data: {
|
|
domain,
|
|
level,
|
|
content: templateContent
|
|
}
|
|
});
|
|
} catch (error) {
|
|
console.error('Erreur lors de la lecture du template:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
error: 'Erreur serveur lors de la lecture du template'
|
|
});
|
|
}
|
|
});
|
|
|
|
// GET /api/templates/:domain - Lister les niveaux disponibles pour un domaine
|
|
router.get('/:domain', (req, res) => {
|
|
const { domain } = req.params;
|
|
|
|
try {
|
|
const domainPath = path.join(__dirname, '../templates', domain);
|
|
|
|
if (!fs.existsSync(domainPath)) {
|
|
return res.status(404).json({
|
|
success: false,
|
|
error: `Domaine non trouvé : ${domain}`
|
|
});
|
|
}
|
|
|
|
const files = fs.readdirSync(domainPath);
|
|
const levels = files
|
|
.filter(file => file.endsWith('.md'))
|
|
.map(file => file.replace('.md', ''));
|
|
|
|
res.json({
|
|
success: true,
|
|
data: {
|
|
domain,
|
|
levels
|
|
}
|
|
});
|
|
} catch (error) {
|
|
console.error('Erreur lors de la lecture du domaine:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
error: 'Erreur serveur lors de la lecture du domaine'
|
|
});
|
|
}
|
|
});
|
|
|
|
// GET /api/templates - Lister tous les domaines disponibles
|
|
router.get('/', (req, res) => {
|
|
try {
|
|
const templatesPath = path.join(__dirname, '../templates');
|
|
|
|
if (!fs.existsSync(templatesPath)) {
|
|
return res.json({
|
|
success: true,
|
|
data: []
|
|
});
|
|
}
|
|
|
|
const domains = fs.readdirSync(templatesPath, { withFileTypes: true })
|
|
.filter(dirent => dirent.isDirectory())
|
|
.map(dirent => dirent.name);
|
|
|
|
// Pour chaque domaine, récupérer les niveaux disponibles
|
|
const domainsWithLevels = domains.map(domain => {
|
|
const domainPath = path.join(templatesPath, domain);
|
|
const files = fs.readdirSync(domainPath);
|
|
const levels = files
|
|
.filter(file => file.endsWith('.md'))
|
|
.map(file => file.replace('.md', ''));
|
|
|
|
return {
|
|
domain,
|
|
levels
|
|
};
|
|
});
|
|
|
|
res.json({
|
|
success: true,
|
|
data: domainsWithLevels
|
|
});
|
|
} catch (error) {
|
|
console.error('Erreur lors de la lecture des templates:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
error: 'Erreur serveur lors de la lecture des templates'
|
|
});
|
|
}
|
|
});
|
|
|
|
module.exports = router; |