From 4f2615688eadba09f535a53e97a40847c7ca9099 Mon Sep 17 00:00:00 2001 From: Kerboul Date: Tue, 14 Jan 2025 15:21:32 +0100 Subject: [PATCH] =?UTF-8?q?Refactor=20les=20routes=20des=20projets=20pour?= =?UTF-8?q?=20utiliser=20des=20contr=C3=B4leurs=20d=C3=A9di=C3=A9s=20et=20?= =?UTF-8?q?am=C3=A9liorer=20la=20gestion=20des=20erreurs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- file_watcher.js | 106 +++++++++++++++++++++++++++++++++++------------- routes/api.js | 73 ++++++++------------------------- 2 files changed, 96 insertions(+), 83 deletions(-) diff --git a/file_watcher.js b/file_watcher.js index 3f72096..abcd9ee 100644 --- a/file_watcher.js +++ b/file_watcher.js @@ -17,38 +17,88 @@ function createProjectDirectory(projectId) { }); } +// Fonction pour récupérer la liste des projets existants et générer leurs dossiers s'ils n'existent pas +function initializeProjectDirectories() { + db.query('SELECT id FROM public.projects', (err, result) => { + if (err) { + console.error('Erreur lors de la récupération des projets existants:', err); + return; + } + result.rows.forEach(row => { + const projectId = row.id; + const projectPath = path.join(PROJECTS_DIR, projectId.toString()); + if (!fs.existsSync(projectPath)) { + createProjectDirectory(projectId); + } + }); + }); +} +// Fonction pour supprimer les dossiers qui ne font pas partie de la base de données +function cleanUpProjectDirectories() { + fs.readdir(PROJECTS_DIR, (err, files) => { + if (err) { + console.error('Erreur lors de la lecture du dossier des projets:', err); + return; + } + db.query('SELECT id FROM public.projects', (err, result) => { + if (err) { + console.error('Erreur lors de la récupération des projets existants:', err); + return; + } + const projectIds = result.rows.map(row => row.id.toString()); + files.forEach(file => { + const projectPath = path.join(PROJECTS_DIR, file); + if (fs.statSync(projectPath).isDirectory() && !projectIds.includes(file)) { + fs.rmdir(projectPath, { recursive: true }, (err) => { + if (err) { + console.error(`Erreur lors de la suppression du dossier du projet ${file}:`, err); + return; + } + console.log(`Dossier supprimé pour le projet ${file} à ${projectPath}`); + }); + } + }); + }); + }); +} + +// Nettoyer les dossiers des projets qui ne sont pas dans la base de données +cleanUpProjectDirectories(); // Fonction pour surveiller les changements dans le dossier de projets function watchProjects() { - fs.watch(PROJECTS_DIR, (eventType, filename) => { - if (eventType === 'rename') { - const projectId = path.basename(filename); - if (fs.existsSync(path.join(PROJECTS_DIR, filename))) { - // Un nouveau projet a été créé - console.log(`Nouveau projet détecté: ${projectId}`); - createProjectDirectory(projectId); - // Ajouter une entrée dans la base de données - db.query('INSERT INTO public.projects (id, name) VALUES ($1, $2)', [projectId, projectId], (err) => { - if (err) { - console.error('Erreur lors de l\'ajout du projet à la base de données:', err); - } else { - console.log(`Projet ${projectId} ajouté à la base de données.`); - } - }); - } else { - // Un projet a été supprimé - console.log(`Projet supprimé: ${projectId}`); - // Supprimer l'entrée de la base de données - db.query('DELETE FROM public.projects WHERE id = $1', [projectId], (err) => { - if (err) { - console.error('Erreur lors de la suppression du projet de la base de données:', err); - } else { - console.log(`Projet ${projectId} supprimé de la base de données.`); - } - }); + fs.watch(PROJECTS_DIR, (eventType, filename) => { + if (eventType === 'rename') { + const projectId = path.basename(filename); + if (fs.existsSync(path.join(PROJECTS_DIR, filename))) { + // Un nouveau projet a été créé + console.log(`Nouveau projet détecté: ${projectId}`); + createProjectDirectory(projectId); + // Ajouter une entrée dans la base de données + db.query('INSERT INTO public.projects (id, name) VALUES ($1, $2)', [projectId, projectId], (err) => { + if (err) { + console.error('Erreur lors de l\'ajout du projet à la base de données:', err); + } else { + console.log(`Projet ${projectId} ajouté à la base de données.`); + } + }); + } else { + // Un projet a été supprimé + console.log(`Projet supprimé: ${projectId}`); + // Supprimer l'entrée de la base de données + db.query('DELETE FROM public.projects WHERE id = $1', [projectId], (err) => { + if (err) { + console.error('Erreur lors de la suppression du projet de la base de données:', err); + } else { + console.log(`Projet ${projectId} supprimé de la base de données.`); + } + }); + } } - } - }); + }); } +// Initialiser les dossiers des projets existants +initializeProjectDirectories(); + // Démarrer la surveillance des projets watchProjects(); \ No newline at end of file diff --git a/routes/api.js b/routes/api.js index 6d44644..d9680dc 100644 --- a/routes/api.js +++ b/routes/api.js @@ -1,7 +1,8 @@ // routes/api.js const express = require('express'); const router = express.Router(); - +const projectController = require('../controllers/projectController'); +const projectModel = require('../models/projectModel'); const db = require('../db'); // Assurez-vous d'importer le fichier db.js const path = require('path'); const fs = require('fs'); @@ -18,19 +19,7 @@ const ffmpeg = require('../ffmpeg'); // Assurez-vous d'importer le fichier ffmpe * 500: * description: Internal server error */ -router.get('/projects', (req, res) => { - const query = 'SELECT * FROM public.projects'; - res.setHeader('Access-Control-Allow-Origin', 'http://localhost:5500'); - res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE'); - res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); - db.query(query, (err, results) => { - if (err) { - console.error('Erreur lors de la récupération des projets:', err); - return res.status(500).json({ error: 'Erreur serveur' }); - } - res.json(results.rows); - }); -}); +router.get('/projects', projectController.getAllProjects); /** * @swagger @@ -50,19 +39,17 @@ router.get('/projects', (req, res) => { * 500: * description: Internal server error */ -router.get('/projects/:id', (req, res) => { - const projectId = req.params.id; - const query = 'SELECT * FROM public.projects WHERE id = $1'; - res.setHeader('Access-Control-Allow-Origin', 'http://localhost:5500'); - res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE'); - res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); - db.query(query, [projectId], (err, results) => { - if (err) { - console.error('Erreur lors de la récupération du projet:', err); - return res.status(500).json({ error: 'Erreur serveur' }); +router.get('/projects/:id', async (req, res) => { + try { + const project = await projectModel.getProjectById(db, req.params.id); + if (!project) { + return res.status(404).json({ error: 'Projet non trouvé' }); } - res.json(results.rows[0]); - }); + res.json(project); + } catch (error) { + console.error('Erreur lors de la récupération du projet:', error); + res.status(500).json({ error: 'Erreur serveur' }); + } }); /** @@ -142,16 +129,7 @@ router.get('/projects/:id/measurements', (req, res) => { * 500: * description: Internal server error */ -router.post('/projects', (req, res) => { - const query = 'INSERT INTO public.projects (name, description, start_date, status) VALUES ($1, $2, $3, $4) RETURNING id'; - db.query(query, [req.body.name, req.body.description, req.body.start_date, req.body.status], (err, results) => { - if (err) { - console.error('Erreur lors de l\'ajout du projet:', err); - return res.status(500).json({ error: 'Erreur serveur' }); - } - res.status(201).json({ message: 'Projet ajouté avec succès', id: results.rows[0].id }); - }); -}); +router.post('/projects', projectController.createProject); /** * @swagger @@ -173,20 +151,7 @@ router.post('/projects', (req, res) => { * 500: * description: Internal server error */ -router.delete('/projects/:id', (req, res) => { - const projectId = req.params.id; - const query = 'DELETE FROM public.projects WHERE id = $1 RETURNING id'; - db.query(query, [projectId], (err, results) => { - if (err) { - console.error('Erreur lors de la suppression du projet:', err); - return res.status(500).json({ error: 'Erreur serveur' }); - } - if (results.rowCount === 0) { - return res.status(404).json({ error: 'Aucun projet trouvé avec cet ID.' }); - } - res.status(200).json({ message: 'Projet supprimé avec succès', id: projectId }); - }); -}); +router.delete('/projects/:id', projectController.deleteProject); /** * @swagger @@ -394,10 +359,8 @@ router.get('/videos/:id', (req, res) => { router.post('/videos', (req, res) => { const query = 'INSERT INTO public.videos (project_id, measurement_ids, video_path, start_timestamp, end_timestamp, image_count, resolution, duration, fps, status, name) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11) RETURNING id'; - list_ids = req.body.measurement_ids.split(','); - - image_count = list_ids.length; - + const list_ids = req.body.measurement_ids.split(','); + const image_count = list_ids.length; const video_path = '/videos/' + req.body.name + '.mp4'; const query_first = 'SELECT timestamp FROM public.measurements WHERE id = $1'; @@ -479,7 +442,7 @@ router.get('/smile', (req, res) => { res.setHeader('Access-Control-Allow-Origin', 'http://localhost:5500'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE'); res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); - const imagePath = path.join('/storage/smile.jpg'); + const imagePath = path.join(__dirname, '../storage/smile.jpg'); fs.access(imagePath, fs.constants.F_OK, (err) => { if (err) { console.error('Image not found:', err);