Refactor la gestion des mesures en remplaçant le gestionnaire de mesures par le gestionnaire de stockage. Ajouter des fonctions pour gérer les images et les chemins des mesures. Améliorer la gestion des erreurs et nettoyer le code.

This commit is contained in:
2025-04-03 11:03:10 +02:00
parent c3b2059428
commit 6077dfd716
6 changed files with 124 additions and 199 deletions

View File

@@ -1,86 +1,54 @@
const express = require('express');
const router = express.Router();
const db = require('../db');
const measureManager = require('../src/measure/measureManager');
const serverError = require('../utils/serverError');
const database_manager = require('../src/database/database_manager');
router.get('/measurements', (req, res) => {
const query = 'SELECT * FROM public.measurements';
db.query(query, (err, results) => {
if (err) {
serverError.sendError('Erreur lors de la récupération des mesures:', res, err, 500);
}
res.json(results.rows);
});
const measurements = database_manager.measurement.get_all_measurements();
if (!measurements) {
return res.status(404).json({ error: 'No measurements found' });
}
res.json(measurements);
});
router.get('/measurements/:id', (req, res) => {
const measurementId = req.params.id;
if (!measurementId || isNaN(measurementId)) {
return res.status(400).json({ error: 'Invalid measurement ID' });
const measurement = database_manager.measurement.get_measurement_by_id(req.params.id);
if (!measurement) {
return res.status(404).json({ error: 'Measurement not found' });
}
const query = 'SELECT * FROM public.measurements WHERE id = $1';
db.query(query, [measurementId], (err, results) => {
if (err) {
serverError.sendError('Erreur lors de la récupération de la mesure:', res, err, 500);
}
res.json(results.rows);
});
res.json(measurement);
});
router.get('/measurements/:projectId/:orderId', async (req, res) => {
const projectId = req.params.projectId;
const orderId = req.params.orderId;
if (!projectId || isNaN(projectId) || !orderId || isNaN(orderId)) {
return res.status(400).json({ error: 'Invalid project ID or order ID' });
}
try {
const measurement = await measureManager.getMeasurement(projectId, orderId);
res.json(measurement);
} catch (error) {
serverError.sendError('Error getting measurement:', res, error, 500);
const measurement = await database_manager.measurement.get_measurement_by_project_and_order_id(req.params.projectId, req.params.orderId);
if (!measurement) {
return res.status(404).json({ error: 'Measurement not found' });
}
res.json(measurement);
});
router.post('/measurements', (req, res) => {
const { project_id, timestamp, image_path, temperature, humidity } = req.body;
if (!project_id || !timestamp || !image_path || !temperature || !humidity) {
const { projectId, timestamp, imagePath, temperature, humidity, orderId } = req.body;
if (!projectId || !timestamp || !imagePath || !temperature || !humidity || !orderId) {
return res.status(400).json({ error: 'All fields are required' });
}
const query = 'INSERT INTO public.measurements (project_id, timestamp, image_path, temperature, humidity) VALUES ($1, $2, $3, $4, $5) RETURNING id';
db.query(query, [project_id, timestamp, image_path, temperature, humidity], (err, results) => {
if (err) {
serverError.sendError('Erreur lors de l\'ajout de la mesure:', res, err, 500);
}
res.status(201).json({ message: 'Mesure ajoutée avec succès', id: results.rows[0].id });
});
const measurement = database_manager.measurement.add_measurement(projectId, timestamp, imagePath, temperature, humidity, orderId);
res.status(201).json(measurement);
});
router.delete('/measurements/:id', async (req, res) => {
const measurementId = req.params.id;
if (!measurementId || isNaN(measurementId)) {
return res.status(400).json({ error: 'Invalid measurement ID' });
}
try {
await measureManager.deleteMeasurement(measurementId);
res.status(200).json({ message: 'Measurement deleted successfully', id: measurementId });
} catch (error) {
serverError.sendError('Error deleting measurement:', res, error, 500);
const measurement = await database_manager.measurement.delete_measurement_by_id(req.params.id);
if (!measurement) {
return res.status(404).json({ error: 'Measurement not found' });
}
res.json({ message: 'Measurement deleted successfully', id: measurement.id });
});
router.delete('/measurements/:projectId/:orderId', async (req, res) => {
const projectId = req.params.projectId;
const orderId = req.params.orderId;
if (!projectId || isNaN(projectId) || !orderId || isNaN(orderId)) {
return res.status(400).json({ error: 'Invalid project ID or order ID' });
}
try {
const measurement = await measureManager.deleteMeasurementByOrderId(projectId, orderId);
res.status(200).json({ message: 'Measurement deleted successfully', id: measurement.id });
} catch (error) {
serverError.sendError('Error deleting measurement:', res, error, 500);
const measurement = await database_manager.measurement.delete_measurement_by_project_and_order_id(req.params.projectId, req.params.orderId);
if (!measurement) {
return res.status(404).json({ error: 'Measurement not found' });
}
res.json({ message: 'Measurement deleted successfully', id: measurement.id });
});
module.exports = router;

View File

@@ -1,7 +1,8 @@
const express = require('express');
const router = express.Router();
const multer = require('multer');
const measureManager = require('../src/measure/measureManager');
const database_manager = require('../src/database/database_manager');
const storage_manager = require('../src/data/storage_manager');
const serverError = require('../utils/serverError');
const upload = multer({ storage: multer.memoryStorage() });
@@ -17,7 +18,10 @@ router.post('/uploadmeasurement', upload.single('image'), async (req, res) => {
}
try {
const nextOrderId = await measureManager.getNextOrderId(projectId);
const nextOrderId = await database_manager.measurement.get_next_order_id(projectId);
if (nextOrderId === null) {
return res.status(404).json({ error: 'Project not found' });
}
// Log types for debugging
console.log('Types:', {
@@ -26,8 +30,14 @@ router.post('/uploadmeasurement', upload.single('image'), async (req, res) => {
nextOrderId: typeof nextOrderId
});
const imagePath = await measureManager.uploadMeasureImage(image, projectId, nextOrderId);
const measurement = await measureManager.addMeasureToProject(projectId, timestamp, imagePath, temperature, humidity, nextOrderId);
const imagePath = await storage_manager.measurement.upload_measurement_image(image, projectId, nextOrderId);
if (!imagePath) {
return res.status(500).json({ error: 'Failed to upload image' });
}
const measurement = await database_manager.measurement.add_measurement(projectId, timestamp, imagePath, temperature, humidity, nextOrderId);
if (!measurement) {
return res.status(500).json({ error: 'Failed to add measurement' });
}
res.json({ message: 'Measurement uploaded successfully', path: imagePath, id: measurement.id });
} catch (error) {
serverError.sendError('Error uploading measurement:', res, error, 500);

View File

@@ -5,7 +5,7 @@ const fs = require('fs');
const rangeParser = require('range-parser');
const serverError = require('../utils/serverError');
const videoManager = require('../src/video/videoManager');
const measureManager = require('../src/measure/measureManager');
const storage_manager = require('../src/data/storage_manager');
const dbTester = require('../test/tester');
router.get('/videos', (req, res) => {
@@ -55,7 +55,10 @@ router.post('/videos', async (req, res) => {
}
const { duration: videoDuration, measurement_ids: videoMeasurementIds, project_id: videoProjectId } = result.rows[0];
const pathList = await measureManager.getPathList(videoMeasurementIds, videoProjectId);
const pathList = await storage_manager.measurement.get_path_list(videoMeasurementIds, project_id);
if (!pathList || pathList.length === 0) {
return res.status(404).json({ error: 'Aucun chemin trouvé pour les mesures' });
}
// parser la résolution (ex: 1920x1080)
const [res_width, res_height] = resolution.split('x').map(Number);