const express = require('express'); const path = require('path'); const fs = require('fs'); const yaml = require('js-yaml'); const app = express(); // Activer le middleware JSON pour parser le corps des requêtes app.use(express.json()); app.use(express.urlencoded({ extended: true })); // Si vous utilisez des requêtes POST de type formulaire // Charger config.yaml const config = yaml.load(fs.readFileSync('config.yaml', 'utf8')); // Route pour récupérer les données utilisateur app.get('/user/:username', (req, res) => { const username = req.params.username; const userFilePath = path.join(__dirname, `data/${username}.yaml`); try { const userData = yaml.load(fs.readFileSync(userFilePath, 'utf8')); res.json(userData); } catch (error) { res.status(404).json({ error: "Utilisateur non trouvé" }); } }); // Route pour mettre à jour la position d'un utilisateur app.post('/update-position', (req, res) => { const { username, longitude, latitude, last_update } = req.body; // Extraction des données de la requête if (!username || !longitude || !latitude || !last_update) { console.error("Requête invalide : données manquantes"); return res.status(400).json({ error: "Les champs username, longitude, latitude et last_update sont requis." }); } const userFilePath = path.join(__dirname, `data/${username}.yaml`); // Vérification que le fichier existe if (!fs.existsSync(userFilePath)) { console.error(`Fichier utilisateur non trouvé : ${userFilePath}`); return res.status(404).json({ error: `Utilisateur ${username} non trouvé.` }); } try { console.log(`Tentative de mise à jour des coordonnées pour ${username} :`, longitude, latitude, last_update); const userData = yaml.load(fs.readFileSync(userFilePath, 'utf8')); // Mise à jour des données utilisateur userData.position_actuelle.longitude = longitude; userData.position_actuelle.latitude = latitude; userData.position_actuelle.last_update = last_update; // Sauvegarde des données dans le fichier YAML fs.writeFileSync(userFilePath, yaml.dump(userData), 'utf8'); console.log(`Mise à jour réussie de ${userFilePath}`); res.json({ success: true, message: "Position mise à jour", data: userData }); } catch (error) { console.error(`Erreur lors de la mise à jour pour ${username} :`, error.message); res.status(500).json({ error: "Impossible de mettre à jour la position." }); } }); // Servir les fichiers statiques app.use('/static', express.static(path.join(__dirname, 'static'))); // Page principale app.get('/', (req, res) => res.sendFile(path.join(__dirname, 'index.html'))); app.listen(config.port, () => { console.log(`Serveur démarré sur http://localhost:${config.port}`); }); // Route pour servir la page de supervision app.get('/supervise', (req, res) => { res.sendFile(path.join(__dirname, 'supervise.html')); }); // Route pour récupérer les données de Baptiste app.get('/data/baptiste.yaml', (req, res) => { const userFilePath = path.join(__dirname, 'data/baptiste.yaml'); const configFilePath = path.join(__dirname, 'config.yaml'); try { const userData = yaml.load(fs.readFileSync(userFilePath, 'utf8')); const config = yaml.load(fs.readFileSync(configFilePath, 'utf8')); // Inclure le décalage des pins dans la réponse userData.pin_offset = config.pin_offset; res.json(userData); } catch (error) { console.error("Erreur lors de la récupération des données :", error.message); res.status(500).json({ error: "Impossible de récupérer les données" }); } }); // Route pour la page de Julien app.get('/julien', (req, res) => { res.sendFile(path.join(__dirname, 'index_julien.html')); }); /// Route pour récupérer les données de Julien app.get('/data/julien.yaml', (req, res) => { const userFilePath = path.join(__dirname, 'data/julien.yaml'); const configFilePath = path.join(__dirname, 'config.yaml'); try { const userData = yaml.load(fs.readFileSync(userFilePath, 'utf8')); const config = yaml.load(fs.readFileSync(configFilePath, 'utf8')); // Inclure le décalage des pins dans la réponse userData.pin_offset = config.pin_offset; res.json(userData); } catch (error) { console.error("Erreur lors de la récupération des données :", error.message); res.status(500).json({ error: "Impossible de récupérer les données" }); } }); // Servir les fichiers statiques des tuiles app.use('/tiles', express.static(path.join(__dirname, 'tiles')));