Réorganisation des routes API et ajout de la gestion des téléchargements d'images

This commit is contained in:
2025-02-11 18:13:28 +01:00
parent 83dd43e0c2
commit db5d0ab9f9
11 changed files with 895 additions and 790 deletions

130
routes/uploadRoutes.js Normal file
View File

@@ -0,0 +1,130 @@
const express = require('express');
const router = express.Router();
const multer = require('multer');
const measureManager = require('../src/measure/measureManager');
const serverError = require('../utils/serverError');
const upload = multer({ storage: multer.memoryStorage() });
/**
* @swagger
* /upload:
* post:
* summary: Télécharger une image
* description: Télécharge une image pour un projet et un ordre spécifiques.
* consumes:
* - multipart/form-data
* parameters:
* - in: formData
* name: image
* type: file
* description: Fichier image à télécharger
* - in: formData
* name: projectId
* type: integer
* description: ID du projet
* - in: formData
* name: orderId
* type: integer
* description: ID de la commande
* responses:
* 200:
* description: Image téléchargée avec succès.
* content:
* application/json:
* schema:
* type: object
* properties:
* message:
* type: string
* path:
* type: string
* 400:
* description: Tous les champs sont requis.
* 500:
* description: Erreur serveur.
*/
router.post('/upload', upload.single('image'), async (req, res) => {
const { projectId, orderId } = req.body;
const image = req.file;
if (!image || !projectId || !orderId) {
return res.status(400).json({ error: 'All fields are required' });
}
try {
const imagePath = await measureManager.uploadMeasureImage(image, projectId, orderId);
res.json({ message: 'Image uploaded successfully', path: imagePath });
} catch (error) {
serverError.sendError('Error uploading image:', res, error);
}
});
/**
* @swagger
* /uploadmeasurement:
* post:
* summary: Télécharger une mesure avec une image
* description: Télécharge une mesure avec une image pour un projet spécifique.
* consumes:
* - multipart/form-data
* parameters:
* - in: formData
* name: image
* type: file
* description: Fichier image à télécharger
* - in: formData
* name: projectId
* type: integer
* description: ID du projet
* - in: formData
* name: timestamp
* type: string
* format: date-time
* description: Horodatage de la mesure
* - in: formData
* name: temperature
* type: number
* description: Température mesurée
* - in: formData
* name: humidity
* type: number
* description: Humidité mesurée
* responses:
* 200:
* description: Mesure téléchargée avec succès.
* content:
* application/json:
* schema:
* type: object
* properties:
* message:
* type: string
* path:
* type: string
* id:
* type: integer
* 400:
* description: Tous les champs sont requis.
* 500:
* description: Erreur serveur.
*/
router.post('/uploadmeasurement', upload.single('image'), async (req, res) => {
const { projectId, timestamp, temperature, humidity } = req.body;
const image = req.file;
if (!image || !projectId || !timestamp || !temperature || !humidity) {
return res.status(400).json({ error: 'All fields are required' });
}
try {
const nextOrderId = await measureManager.getNextOrderId(projectId);
const imagePath = await measureManager.uploadMeasureImage(image, projectId, nextOrderId);
const measurement = await measureManager.addMeasureToProject(projectId, timestamp, imagePath, temperature, humidity, nextOrderId);
res.json({ message: 'Measurement uploaded successfully', path: imagePath, id: measurement.id });
} catch (error) {
serverError.sendError('Error uploading measurement:', res, error);
}
});
module.exports = router;