const express = require('express'); const cors = require('cors'); const path = require('path'); const app = express(); const bodyParser = require('body-parser'); const fs = require('fs'); app.use(cors()); app.use(express.json()); app.post('/api/submit', (req, res) => { const data = req.body; console.log('Données reçues (client->server) :', data); // Lecture du fichier ./src/data.json fs.readFile('./src/data.json', 'utf8', (err, fileData) => { let json = []; if (!err && fileData) { try { json = JSON.parse(fileData); } catch (e) { console.error('Erreur de parsing JSON:', e); } } // Ajout des nouvelles données au tableau json.push(data); // Réécriture du fichier avec les données mises à jour fs.writeFile('./src/data.json', JSON.stringify(json, null, 2), (writeErr) => { if (writeErr) { console.error('Erreur d\'écriture:', writeErr); return res.status(500).json({ success: false, message: 'Erreur lors de la sauvegarde' }); } res.json({ success: true, message: 'Données sauvegardées' }); }); }); }); app.post('/api/getanswers', (req, res) => { console.log('/api/getanswers'); const uniqueId = req.headers['x-unique-id']; if (!uniqueId) { console.log('Unique ID non fourni dans les en-têtes'); return res.status(400).send('Unique ID is required'); } console.log('Unique ID reçu:', uniqueId); const filePath = path.join(__dirname, './src/data.json'); fs.readFile(filePath, 'utf8', (err, data) => { if (err) { console.error('Erreur lors de la lecture du fichier ./src/data.json:', err); res.status(500).send('Erreur lors de la lecture des données.'); return; } try { if (!data.trim()) { console.log('Fichier ./src/data.json vide'); res.json([]); return; } const jsonData = JSON.parse(data); if (!Array.isArray(jsonData)) { throw new Error('Le contenu de ./src/data.json n\'est pas un tableau'); } // console.log('Données lues dans ./src/data.json:', JSON.stringify(jsonData, null, 2)); console.log('Données lues dans ./src/data.json....'); const filteredData = jsonData.filter(item => item.uniqueId === uniqueId); // console.log('Données filtrées:', JSON.stringify(filteredData, null, 2)); if (filteredData.length === 0) { console.log(`Aucune entrée trouvée avec l'uniqueId: ${uniqueId}`); return res.status(404).send('Aucune donnée trouvée pour cet identifiant unique.'); } // console.error("filteredData -------- "+filteredData.currentPath) // Renvoie les données filtrées res.json(filteredData); } catch (parseError) { console.error('Erreur lors de l\'analyse du JSON:', parseError); res.status(500).send('Erreur lors de l\'analyse des données.'); } }); }); app.post('/api/getresults', (req, res) => { console.log('/api/getresults'); const uniqueId = req.headers['x-folder-name']; if (!uniqueId) { console.log('ID (getresults folder-name) non fourni dans les en-têtes'); return res.status(400).send('Unique ID is required'); } console.log('ID folder-name:', uniqueId); const filePath = path.join(__dirname, '/public/codes/', uniqueId, 'resultats.json'); console.log("---- filePath == "+filePath) fs.readFile(filePath, 'utf8', (err, data) => { if (err) { console.error('Erreur lors de la lecture du fichier ./src/data.json:', err); res.status(500).send('Erreur lors de la lecture des données.'); return; } try { if (!data.trim()) { console.log('Fichier ./src/data.json vide'); res.json([]); return; } const jsonData = JSON.parse(data); if (!Array.isArray(jsonData)) { throw new Error('Le contenu de ./src/data.json n\'est pas un tableau'); } // console.log('Données lues dans ./src/data.json:', JSON.stringify(jsonData, null, 2)); console.log('Données lues dans ./src/data.json....'); const filteredData = jsonData.filter(item => item.uniqueId === uniqueId); console.log('Données filtrées:', JSON.stringify(filteredData, null, 2)); if (filteredData.length === 0) { console.log(`Aucune entrée trouvée avec l'uniqueId: ${uniqueId}`); return res.status(404).send('Aucune donnée trouvée pour cet identifiant unique.'); } // console.error("filteredData -------- "+filteredData.currentPath) // Renvoie les données filtrées res.json(filteredData); } catch (parseError) { console.error('Erreur lors de l\'analyse du JSON:', parseError); res.status(500).send('Erreur lors de l\'analyse des données.'); } }); }); /// /api/getresults // Route pour lister uniquement les dossiers dans ./public/codes app.get('/api/list-codes', (req, res) => { const codesDir = path.join(__dirname, 'public', 'codes'); fs.readdir(codesDir, { withFileTypes: true }, (err, files) => { if (err) { console.error('Erreur lors de la lecture du dossier :', err); return res.status(500).json({ success: false, message: 'Erreur lors de la lecture du dossier' }); } // Filtrer uniquement les dossiers const directories = files .filter(file => file.isDirectory()) .map(directory => ({ name: directory.name, path: path.join('public', 'codes', directory.name).replace(/\\/g, '/') })); res.json({ success: true, directories }); }); }); app.use(bodyParser.json()); app.post('/api/savefile', (req, res) => { console.log("/api/savefile/") const { datatos, filepath, fileName, uniqueId_state, saveto } = req.body; const fixpagename_html = (saveto=="direct") ? fileName.replace(".page",".html") : fileName; const filepath_fix = path.join(__dirname, '/public/', filepath, "/data/", uniqueId_state+ "_"+ fixpagename_html); console.log("saveto == "+saveto) console.log(fileName) console.log(filepath_fix) console.log(fixpagename_html) fs.writeFile(filepath_fix, datatos, (err) => { if (err) { console.error("Error saving file") return res.status(500).send('Error saving file'); } res.send('File saved successfully'); }); }); const PORT = 4000; app.listen(PORT, () => { console.log(`API en écoute sur http://localhost:${PORT}`); });