Refactor les routes des projets pour utiliser des contrôleurs dédiés et améliorer la gestion des erreurs
This commit is contained in:
@@ -17,6 +17,53 @@ 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) => {
|
||||
@@ -50,5 +97,8 @@ function watchProjects() {
|
||||
});
|
||||
}
|
||||
|
||||
// Initialiser les dossiers des projets existants
|
||||
initializeProjectDirectories();
|
||||
|
||||
// Démarrer la surveillance des projets
|
||||
watchProjects();
|
||||
@@ -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(project);
|
||||
} catch (error) {
|
||||
console.error('Erreur lors de la récupération du projet:', error);
|
||||
res.status(500).json({ error: 'Erreur serveur' });
|
||||
}
|
||||
res.json(results.rows[0]);
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user