Files
questionnaire/index_api.js

217 lines
6.8 KiB
JavaScript

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}`);
});