const express = require('express'); const router = express.Router(); const db = require('../db'); const measureManager = require('../src/measure/measureManager'); const serverError = require('../utils/serverError'); /** * @swagger * /measurements: * get: * summary: Récupérer toutes les mesures * description: Récupère toutes les mesures de la base de données. * responses: * 200: * description: Une liste de mesures. * content: * application/json: * schema: * type: array * items: * type: object * properties: * id: * type: integer * project_id: * type: integer * timestamp: * type: string * format: date-time * image_path: * type: string * temperature: * type: number * humidity: * type: number * 500: * description: Erreur serveur. */ 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); } res.json(results.rows); }); }); /** * @swagger * /measurements/{id}: * get: * summary: Récupérer une mesure par ID * description: Récupère une mesure spécifique en utilisant son ID. * parameters: * - in: path * name: id * schema: * type: integer * required: true * description: ID de la mesure * responses: * 200: * description: Une mesure. * content: * application/json: * schema: * type: object * properties: * id: * type: integer * project_id: * type: integer * timestamp: * type: string * format: date-time * image_path: * type: string * temperature: * type: number * humidity: * type: number * 400: * description: ID de mesure invalide. * 500: * description: Erreur serveur. */ 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 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); } res.json(results.rows); }); }); /** * @swagger * /measurements/{projectId}/{orderId}: * get: * summary: Récupérer une mesure par project ID et order ID * description: Récupère une mesure spécifique en utilisant le project ID et order ID. * parameters: * - in: path * name: projectId * schema: * type: integer * required: true * description: ID du projet * - in: path * name: orderId * schema: * type: integer * required: true * description: ID de la commande * responses: * 200: * description: Une mesure. * content: * application/json: * schema: * type: object * properties: * id: * type: integer * project_id: * type: integer * timestamp: * type: string * format: date-time * image_path: * type: string * temperature: * type: number * humidity: * type: number * 400: * description: ID de projet ou de commande invalide. * 500: * description: Erreur serveur. */ 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); } }); /** * @swagger * /measurements: * post: * summary: Ajouter une nouvelle mesure * description: Ajoute une nouvelle mesure à la base de données. * requestBody: * required: true * content: * application/json: * schema: * type: object * properties: * project_id: * type: integer * timestamp: * type: string * format: date-time * image_path: * type: string * temperature: * type: number * humidity: * type: number * responses: * 201: * description: Mesure ajoutée avec succès. * 400: * description: Tous les champs sont requis. * 500: * description: Erreur serveur. */ router.post('/measurements', (req, res) => { const { project_id, timestamp, image_path, temperature, humidity } = req.body; if (!project_id || !timestamp || !image_path || !temperature || !humidity) { 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); } res.status(201).json({ message: 'Mesure ajoutée avec succès', id: results.rows[0].id }); }); }); /** * @swagger * /measurements/{id}: * delete: * summary: Supprimer une mesure par ID * description: Supprime une mesure spécifique en utilisant son ID. * parameters: * - in: path * name: id * schema: * type: integer * required: true * description: ID de la mesure * responses: * 200: * description: Mesure supprimée avec succès. * 400: * description: ID de mesure invalide. * 500: * description: Erreur serveur. */ 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 { const measurement = await measureManager.deleteMeasurement(measurementId); res.status(200).json({ message: 'Measurement deleted successfully', id: measurementId }); } catch (error) { serverError.sendError('Error deleting measurement:', res, error); } }); /** * @swagger * /measurements/{projectId}/{orderId}: * delete: * summary: Supprimer une mesure par project ID et order ID * description: Supprime une mesure spécifique en utilisant le project ID et order ID. * parameters: * - in: path * name: projectId * schema: * type: integer * required: true * description: ID du projet * - in: path * name: orderId * schema: * type: integer * required: true * description: ID de la commande * responses: * 200: * description: Mesure supprimée avec succès. * 400: * description: ID de projet ou de commande invalide. * 500: * description: Erreur serveur. */ 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); } }); module.exports = router;