Supprimer la documentation Swagger obsolète dans plusieurs fichiers de routes
This commit is contained in:
@@ -12,39 +12,7 @@ const minInterval = 3; // Minutes
|
|||||||
var captureProjectID = -1;
|
var captureProjectID = -1;
|
||||||
var captureInterval = 0; // Minutes
|
var captureInterval = 0; // Minutes
|
||||||
|
|
||||||
/**
|
|
||||||
* @swagger
|
|
||||||
* /procedure/start/:
|
|
||||||
* post:
|
|
||||||
* summary: Start the capture procedure
|
|
||||||
* description: Starts the capture procedure with the given project ID and interval.
|
|
||||||
* requestBody:
|
|
||||||
* required: true
|
|
||||||
* content:
|
|
||||||
* application/json:
|
|
||||||
* schema:
|
|
||||||
* type: object
|
|
||||||
* properties:
|
|
||||||
* projectId:
|
|
||||||
* type: integer
|
|
||||||
* description: The ID of the project to start capturing.
|
|
||||||
* interval:
|
|
||||||
* type: integer
|
|
||||||
* description: The interval in minutes for the capture.
|
|
||||||
* responses:
|
|
||||||
* 200:
|
|
||||||
* description: Capture procedure started successfully.
|
|
||||||
* content:
|
|
||||||
* application/json:
|
|
||||||
* schema:
|
|
||||||
* type: object
|
|
||||||
* properties:
|
|
||||||
* message:
|
|
||||||
* type: string
|
|
||||||
* example: "Procédure de capture démarrée avec succès, projet ID: 1, interval: 10 minutes."
|
|
||||||
* 500:
|
|
||||||
* description: Internal server error.
|
|
||||||
*/
|
|
||||||
router.post('/procedure/start/', async (req, res) => {
|
router.post('/procedure/start/', async (req, res) => {
|
||||||
const { projectId, interval } = req.body;
|
const { projectId, interval } = req.body;
|
||||||
try {
|
try {
|
||||||
@@ -115,26 +83,7 @@ function stopProcedure() {
|
|||||||
return { message: 'Procédure de capture arrêtée avec succès, projet ID: ' + oldProjectID + ', interval: ' + oldInterval + ' minutes.' };
|
return { message: 'Procédure de capture arrêtée avec succès, projet ID: ' + oldProjectID + ', interval: ' + oldInterval + ' minutes.' };
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @swagger
|
|
||||||
* /procedure/stop/:
|
|
||||||
* post:
|
|
||||||
* summary: Stop the capture procedure
|
|
||||||
* description: Stops the capture procedure.
|
|
||||||
* responses:
|
|
||||||
* 200:
|
|
||||||
* description: Capture procedure stopped successfully.
|
|
||||||
* content:
|
|
||||||
* application/json:
|
|
||||||
* schema:
|
|
||||||
* type: object
|
|
||||||
* properties:
|
|
||||||
* message:
|
|
||||||
* type: string
|
|
||||||
* example: "Procédure de capture arrêtée avec succès."
|
|
||||||
* 500:
|
|
||||||
* description: Internal server error.
|
|
||||||
*/
|
|
||||||
router.post('/procedure/stop/', async (req, res) => {
|
router.post('/procedure/stop/', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const result = stopProcedure();
|
const result = stopProcedure();
|
||||||
|
|||||||
@@ -7,22 +7,6 @@ const dbTester = require('../test/tester');
|
|||||||
const db = require('../db');
|
const db = require('../db');
|
||||||
const serverError = require('../utils/serverError');
|
const serverError = require('../utils/serverError');
|
||||||
|
|
||||||
/**
|
|
||||||
* @swagger
|
|
||||||
* /smile:
|
|
||||||
* get:
|
|
||||||
* summary: Retrieve a smile image
|
|
||||||
* responses:
|
|
||||||
* 200:
|
|
||||||
* description: A smile image
|
|
||||||
* content:
|
|
||||||
* image/jpeg:
|
|
||||||
* schema:
|
|
||||||
* type: string
|
|
||||||
* format: binary
|
|
||||||
* 404:
|
|
||||||
* description: Image not found
|
|
||||||
*/
|
|
||||||
router.get('/smile', (req, res) => {
|
router.get('/smile', (req, res) => {
|
||||||
const imagePath = dbTester.getSmileImage();
|
const imagePath = dbTester.getSmileImage();
|
||||||
fs.access(imagePath, fs.constants.F_OK, (err) => {
|
fs.access(imagePath, fs.constants.F_OK, (err) => {
|
||||||
@@ -34,35 +18,6 @@ router.get('/smile', (req, res) => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* @swagger
|
|
||||||
* /images/{projectId}/{orderId}:
|
|
||||||
* get:
|
|
||||||
* summary: Retrieve an image by project and order ID
|
|
||||||
* parameters:
|
|
||||||
* - in: path
|
|
||||||
* name: projectId
|
|
||||||
* required: true
|
|
||||||
* schema:
|
|
||||||
* type: string
|
|
||||||
* description: The project ID
|
|
||||||
* - in: path
|
|
||||||
* name: orderId
|
|
||||||
* required: true
|
|
||||||
* schema:
|
|
||||||
* type: string
|
|
||||||
* description: The order ID
|
|
||||||
* responses:
|
|
||||||
* 200:
|
|
||||||
* description: An image file
|
|
||||||
* content:
|
|
||||||
* application/octet-stream:
|
|
||||||
* schema:
|
|
||||||
* type: string
|
|
||||||
* format: binary
|
|
||||||
* 404:
|
|
||||||
* description: Image not found
|
|
||||||
*/
|
|
||||||
router.get('/images/:projectId/:orderId', (req, res) => {
|
router.get('/images/:projectId/:orderId', (req, res) => {
|
||||||
const projectId = req.params.projectId;
|
const projectId = req.params.projectId;
|
||||||
const orderId = req.params.orderId;
|
const orderId = req.params.orderId;
|
||||||
@@ -86,29 +41,6 @@ router.get('/images/:projectId/:orderId', (req, res) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @swagger
|
|
||||||
* /images/{measurementId}:
|
|
||||||
* get:
|
|
||||||
* summary: Retrieve an image by measurement ID
|
|
||||||
* parameters:
|
|
||||||
* - in: path
|
|
||||||
* name: measurementId
|
|
||||||
* required: true
|
|
||||||
* schema:
|
|
||||||
* type: string
|
|
||||||
* description: The measurement ID
|
|
||||||
* responses:
|
|
||||||
* 200:
|
|
||||||
* description: An image file
|
|
||||||
* content:
|
|
||||||
* application/octet-stream:
|
|
||||||
* schema:
|
|
||||||
* type: string
|
|
||||||
* format: binary
|
|
||||||
* 404:
|
|
||||||
* description: Image not found
|
|
||||||
*/
|
|
||||||
router.get('/images/:measurementId', (req, res) => {
|
router.get('/images/:measurementId', (req, res) => {
|
||||||
const measurementId = req.params.measurementId;
|
const measurementId = req.params.measurementId;
|
||||||
const query = 'SELECT path FROM public.measurements WHERE id = $1';
|
const query = 'SELECT path FROM public.measurements WHERE id = $1';
|
||||||
@@ -130,37 +62,6 @@ router.get('/images/:measurementId', (req, res) => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* @swagger
|
|
||||||
* /preview/{projectId}/{orderId}:
|
|
||||||
* get:
|
|
||||||
* summary: Retrieve a preview of an image by project and order ID
|
|
||||||
* parameters:
|
|
||||||
* - in: path
|
|
||||||
* name: projectId
|
|
||||||
* required: true
|
|
||||||
* schema:
|
|
||||||
* type: string
|
|
||||||
* description: The project ID
|
|
||||||
* - in: path
|
|
||||||
* name: orderId
|
|
||||||
* required: true
|
|
||||||
* schema:
|
|
||||||
* type: string
|
|
||||||
* description: The order ID
|
|
||||||
* responses:
|
|
||||||
* 200:
|
|
||||||
* description: A resized preview of the image
|
|
||||||
* content:
|
|
||||||
* image/jpeg:
|
|
||||||
* schema:
|
|
||||||
* type: string
|
|
||||||
* format: binary
|
|
||||||
* 404:
|
|
||||||
* description: Image not found
|
|
||||||
* 500:
|
|
||||||
* description: Internal Server Error
|
|
||||||
*/
|
|
||||||
router.get('/preview/:projectId/:orderId', async (req, res) => {
|
router.get('/preview/:projectId/:orderId', async (req, res) => {
|
||||||
const projectId = req.params.projectId;
|
const projectId = req.params.projectId;
|
||||||
const orderId = req.params.orderId;
|
const orderId = req.params.orderId;
|
||||||
|
|||||||
@@ -4,38 +4,6 @@ const db = require('../db');
|
|||||||
const measureManager = require('../src/measure/measureManager');
|
const measureManager = require('../src/measure/measureManager');
|
||||||
const serverError = require('../utils/serverError');
|
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) => {
|
router.get('/measurements', (req, res) => {
|
||||||
const query = 'SELECT * FROM public.measurements';
|
const query = 'SELECT * FROM public.measurements';
|
||||||
db.query(query, (err, results) => {
|
db.query(query, (err, results) => {
|
||||||
@@ -46,45 +14,6 @@ router.get('/measurements', (req, res) => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* @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) => {
|
router.get('/measurements/:id', (req, res) => {
|
||||||
const measurementId = req.params.id;
|
const measurementId = req.params.id;
|
||||||
if (!measurementId || isNaN(measurementId)) {
|
if (!measurementId || isNaN(measurementId)) {
|
||||||
@@ -99,51 +28,6 @@ router.get('/measurements/:id', (req, res) => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* @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) => {
|
router.get('/measurements/:projectId/:orderId', async (req, res) => {
|
||||||
const projectId = req.params.projectId;
|
const projectId = req.params.projectId;
|
||||||
const orderId = req.params.orderId;
|
const orderId = req.params.orderId;
|
||||||
@@ -158,38 +42,6 @@ router.get('/measurements/:projectId/:orderId', async (req, res) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* @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) => {
|
router.post('/measurements', (req, res) => {
|
||||||
const { project_id, timestamp, image_path, temperature, humidity } = req.body;
|
const { project_id, timestamp, image_path, temperature, humidity } = req.body;
|
||||||
if (!project_id || !timestamp || !image_path || !temperature || !humidity) {
|
if (!project_id || !timestamp || !image_path || !temperature || !humidity) {
|
||||||
@@ -204,27 +56,6 @@ router.post('/measurements', (req, res) => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* @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) => {
|
router.delete('/measurements/:id', async (req, res) => {
|
||||||
const measurementId = req.params.id;
|
const measurementId = req.params.id;
|
||||||
if (!measurementId || isNaN(measurementId)) {
|
if (!measurementId || isNaN(measurementId)) {
|
||||||
@@ -238,33 +69,6 @@ router.delete('/measurements/:id', async (req, res) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* @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) => {
|
router.delete('/measurements/:projectId/:orderId', async (req, res) => {
|
||||||
const projectId = req.params.projectId;
|
const projectId = req.params.projectId;
|
||||||
const orderId = req.params.orderId;
|
const orderId = req.params.orderId;
|
||||||
|
|||||||
@@ -3,24 +3,6 @@ const router = express.Router();
|
|||||||
const projectManager = require('../src/project/projectManager');
|
const projectManager = require('../src/project/projectManager');
|
||||||
const serverError = require('../utils/serverError');
|
const serverError = require('../utils/serverError');
|
||||||
|
|
||||||
/**
|
|
||||||
* @swagger
|
|
||||||
* /projects:
|
|
||||||
* get:
|
|
||||||
* summary: Récupérer tous les projets
|
|
||||||
* description: Récupère tous les projets disponibles.
|
|
||||||
* responses:
|
|
||||||
* 200:
|
|
||||||
* description: Une liste de projets.
|
|
||||||
* content:
|
|
||||||
* application/json:
|
|
||||||
* schema:
|
|
||||||
* type: array
|
|
||||||
* items:
|
|
||||||
* type: object
|
|
||||||
* 500:
|
|
||||||
* description: Erreur serveur.
|
|
||||||
*/
|
|
||||||
router.get('/projects', async (req, res) => {
|
router.get('/projects', async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const projects = await projectManager.getAllProjects();
|
const projects = await projectManager.getAllProjects();
|
||||||
@@ -30,31 +12,6 @@ router.get('/projects', async (req, res) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* @swagger
|
|
||||||
* /projects/{id}:
|
|
||||||
* get:
|
|
||||||
* summary: Récupérer un projet par ID
|
|
||||||
* description: Récupère un projet spécifique en utilisant son ID.
|
|
||||||
* parameters:
|
|
||||||
* - in: path
|
|
||||||
* name: id
|
|
||||||
* schema:
|
|
||||||
* type: integer
|
|
||||||
* required: true
|
|
||||||
* description: ID du projet
|
|
||||||
* responses:
|
|
||||||
* 200:
|
|
||||||
* description: Un projet.
|
|
||||||
* content:
|
|
||||||
* application/json:
|
|
||||||
* schema:
|
|
||||||
* type: object
|
|
||||||
* 400:
|
|
||||||
* description: ID de projet invalide.
|
|
||||||
* 500:
|
|
||||||
* description: Erreur serveur.
|
|
||||||
*/
|
|
||||||
router.get('/projects/:id', async (req, res) => {
|
router.get('/projects/:id', async (req, res) => {
|
||||||
const projectId = req.params.id;
|
const projectId = req.params.id;
|
||||||
if (!projectId || isNaN(projectId)) {
|
if (!projectId || isNaN(projectId)) {
|
||||||
@@ -68,33 +25,6 @@ router.get('/projects/:id', async (req, res) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* @swagger
|
|
||||||
* /projects/{id}/videos:
|
|
||||||
* get:
|
|
||||||
* summary: Récupérer les vidéos d'un projet par ID
|
|
||||||
* description: Récupère les vidéos associées à un projet spécifique en utilisant son ID.
|
|
||||||
* parameters:
|
|
||||||
* - in: path
|
|
||||||
* name: id
|
|
||||||
* schema:
|
|
||||||
* type: integer
|
|
||||||
* required: true
|
|
||||||
* description: ID du projet
|
|
||||||
* responses:
|
|
||||||
* 200:
|
|
||||||
* description: Une liste de vidéos.
|
|
||||||
* content:
|
|
||||||
* application/json:
|
|
||||||
* schema:
|
|
||||||
* type: array
|
|
||||||
* items:
|
|
||||||
* type: object
|
|
||||||
* 400:
|
|
||||||
* description: ID de projet invalide.
|
|
||||||
* 500:
|
|
||||||
* description: Erreur serveur.
|
|
||||||
*/
|
|
||||||
router.get('/projects/:id/videos', async (req, res) => {
|
router.get('/projects/:id/videos', async (req, res) => {
|
||||||
const projectId = req.params.id;
|
const projectId = req.params.id;
|
||||||
if (!projectId || isNaN(projectId)) {
|
if (!projectId || isNaN(projectId)) {
|
||||||
@@ -108,33 +38,6 @@ router.get('/projects/:id/videos', async (req, res) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* @swagger
|
|
||||||
* /projects/{id}/measurements:
|
|
||||||
* get:
|
|
||||||
* summary: Récupérer les mesures d'un projet par ID
|
|
||||||
* description: Récupère les mesures associées à un projet spécifique en utilisant son ID.
|
|
||||||
* parameters:
|
|
||||||
* - in: path
|
|
||||||
* name: id
|
|
||||||
* schema:
|
|
||||||
* type: integer
|
|
||||||
* required: true
|
|
||||||
* description: ID du projet
|
|
||||||
* responses:
|
|
||||||
* 200:
|
|
||||||
* description: Une liste de mesures.
|
|
||||||
* content:
|
|
||||||
* application/json:
|
|
||||||
* schema:
|
|
||||||
* type: array
|
|
||||||
* items:
|
|
||||||
* type: object
|
|
||||||
* 400:
|
|
||||||
* description: ID de projet invalide.
|
|
||||||
* 500:
|
|
||||||
* description: Erreur serveur.
|
|
||||||
*/
|
|
||||||
router.get('/projects/:id/measurements', async (req, res) => {
|
router.get('/projects/:id/measurements', async (req, res) => {
|
||||||
const projectId = req.params.id;
|
const projectId = req.params.id;
|
||||||
if (!projectId || isNaN(projectId)) {
|
if (!projectId || isNaN(projectId)) {
|
||||||
@@ -148,31 +51,6 @@ router.get('/projects/:id/measurements', async (req, res) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* @swagger
|
|
||||||
* /projects:
|
|
||||||
* post:
|
|
||||||
* summary: Ajouter un nouveau projet
|
|
||||||
* description: Ajoute un nouveau projet à la base de données.
|
|
||||||
* requestBody:
|
|
||||||
* required: true
|
|
||||||
* content:
|
|
||||||
* application/json:
|
|
||||||
* schema:
|
|
||||||
* type: object
|
|
||||||
* properties:
|
|
||||||
* name:
|
|
||||||
* type: string
|
|
||||||
* description:
|
|
||||||
* type: string
|
|
||||||
* responses:
|
|
||||||
* 201:
|
|
||||||
* description: Projet ajouté avec succès.
|
|
||||||
* 400:
|
|
||||||
* description: Le nom et la description sont requis.
|
|
||||||
* 500:
|
|
||||||
* description: Erreur serveur.
|
|
||||||
*/
|
|
||||||
router.post('/projects', async (req, res) => {
|
router.post('/projects', async (req, res) => {
|
||||||
const { name, description } = req.body;
|
const { name, description } = req.body;
|
||||||
if (!name || !description) {
|
if (!name || !description) {
|
||||||
|
|||||||
@@ -22,4 +22,774 @@
|
|||||||
* description: ID de projet invalide.
|
* description: ID de projet invalide.
|
||||||
* 500:
|
* 500:
|
||||||
* description: Erreur serveur.
|
* description: Erreur serveur.
|
||||||
*/
|
*/
|
||||||
|
/**
|
||||||
|
* @swagger
|
||||||
|
* /projects:
|
||||||
|
* get:
|
||||||
|
* summary: Récupérer tous les projets
|
||||||
|
* description: Récupère tous les projets disponibles.
|
||||||
|
* responses:
|
||||||
|
* 200:
|
||||||
|
* description: Une liste de projets.
|
||||||
|
* content:
|
||||||
|
* application/json:
|
||||||
|
* schema:
|
||||||
|
* type: array
|
||||||
|
* items:
|
||||||
|
* type: object
|
||||||
|
* 500:
|
||||||
|
* description: Erreur serveur.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @swagger
|
||||||
|
* /projects/{id}:
|
||||||
|
* get:
|
||||||
|
* summary: Récupérer un projet par ID
|
||||||
|
* description: Récupère un projet spécifique en utilisant son ID.
|
||||||
|
* parameters:
|
||||||
|
* - in: path
|
||||||
|
* name: id
|
||||||
|
* schema:
|
||||||
|
* type: integer
|
||||||
|
* required: true
|
||||||
|
* description: ID du projet
|
||||||
|
* responses:
|
||||||
|
* 200:
|
||||||
|
* description: Un projet.
|
||||||
|
* content:
|
||||||
|
* application/json:
|
||||||
|
* schema:
|
||||||
|
* type: object
|
||||||
|
* 400:
|
||||||
|
* description: ID de projet invalide.
|
||||||
|
* 500:
|
||||||
|
* description: Erreur serveur.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @swagger
|
||||||
|
* /projects/{id}/videos:
|
||||||
|
* get:
|
||||||
|
* summary: Récupérer les vidéos d'un projet par ID
|
||||||
|
* description: Récupère les vidéos associées à un projet spécifique en utilisant son ID.
|
||||||
|
* parameters:
|
||||||
|
* - in: path
|
||||||
|
* name: id
|
||||||
|
* schema:
|
||||||
|
* type: integer
|
||||||
|
* required: true
|
||||||
|
* description: ID du projet
|
||||||
|
* responses:
|
||||||
|
* 200:
|
||||||
|
* description: Une liste de vidéos.
|
||||||
|
* content:
|
||||||
|
* application/json:
|
||||||
|
* schema:
|
||||||
|
* type: array
|
||||||
|
* items:
|
||||||
|
* type: object
|
||||||
|
* 400:
|
||||||
|
* description: ID de projet invalide.
|
||||||
|
* 500:
|
||||||
|
* description: Erreur serveur.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @swagger
|
||||||
|
* /projects/{id}/measurements:
|
||||||
|
* get:
|
||||||
|
* summary: Récupérer les mesures d'un projet par ID
|
||||||
|
* description: Récupère les mesures associées à un projet spécifique en utilisant son ID.
|
||||||
|
* parameters:
|
||||||
|
* - in: path
|
||||||
|
* name: id
|
||||||
|
* schema:
|
||||||
|
* type: integer
|
||||||
|
* required: true
|
||||||
|
* description: ID du projet
|
||||||
|
* responses:
|
||||||
|
* 200:
|
||||||
|
* description: Une liste de mesures.
|
||||||
|
* content:
|
||||||
|
* application/json:
|
||||||
|
* schema:
|
||||||
|
* type: array
|
||||||
|
* items:
|
||||||
|
* type: object
|
||||||
|
* 400:
|
||||||
|
* description: ID de projet invalide.
|
||||||
|
* 500:
|
||||||
|
* description: Erreur serveur.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @swagger
|
||||||
|
* /projects:
|
||||||
|
* post:
|
||||||
|
* summary: Ajouter un nouveau projet
|
||||||
|
* description: Ajoute un nouveau projet à la base de données.
|
||||||
|
* requestBody:
|
||||||
|
* required: true
|
||||||
|
* content:
|
||||||
|
* application/json:
|
||||||
|
* schema:
|
||||||
|
* type: object
|
||||||
|
* properties:
|
||||||
|
* name:
|
||||||
|
* type: string
|
||||||
|
* description:
|
||||||
|
* type: string
|
||||||
|
* responses:
|
||||||
|
* 201:
|
||||||
|
* description: Projet ajouté avec succès.
|
||||||
|
* 400:
|
||||||
|
* description: Le nom et la description sont requis.
|
||||||
|
* 500:
|
||||||
|
* description: Erreur serveur.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @swagger
|
||||||
|
* /procedure/start/:
|
||||||
|
* post:
|
||||||
|
* summary: Start the capture procedure
|
||||||
|
* description: Starts the capture procedure with the given project ID and interval.
|
||||||
|
* requestBody:
|
||||||
|
* required: true
|
||||||
|
* content:
|
||||||
|
* application/json:
|
||||||
|
* schema:
|
||||||
|
* type: object
|
||||||
|
* properties:
|
||||||
|
* projectId:
|
||||||
|
* type: integer
|
||||||
|
* description: The ID of the project to start capturing.
|
||||||
|
* interval:
|
||||||
|
* type: integer
|
||||||
|
* description: The interval in minutes for the capture.
|
||||||
|
* responses:
|
||||||
|
* 200:
|
||||||
|
* description: Capture procedure started successfully.
|
||||||
|
* content:
|
||||||
|
* application/json:
|
||||||
|
* schema:
|
||||||
|
* type: object
|
||||||
|
* properties:
|
||||||
|
* message:
|
||||||
|
* type: string
|
||||||
|
* example: "Procédure de capture démarrée avec succès, projet ID: 1, interval: 10 minutes."
|
||||||
|
* 500:
|
||||||
|
* description: Internal server error.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @swagger
|
||||||
|
* /procedure/stop/:
|
||||||
|
* post:
|
||||||
|
* summary: Stop the capture procedure
|
||||||
|
* description: Stops the capture procedure.
|
||||||
|
* responses:
|
||||||
|
* 200:
|
||||||
|
* description: Capture procedure stopped successfully.
|
||||||
|
* content:
|
||||||
|
* application/json:
|
||||||
|
* schema:
|
||||||
|
* type: object
|
||||||
|
* properties:
|
||||||
|
* message:
|
||||||
|
* type: string
|
||||||
|
* example: "Procédure de capture arrêtée avec succès."
|
||||||
|
* 500:
|
||||||
|
* description: Internal server error.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @swagger
|
||||||
|
* /smile:
|
||||||
|
* get:
|
||||||
|
* summary: Retrieve a smile image
|
||||||
|
* responses:
|
||||||
|
* 200:
|
||||||
|
* description: A smile image
|
||||||
|
* content:
|
||||||
|
* image/jpeg:
|
||||||
|
* schema:
|
||||||
|
* type: string
|
||||||
|
* format: binary
|
||||||
|
* 404:
|
||||||
|
* description: Image not found
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @swagger
|
||||||
|
* /images/{projectId}/{orderId}:
|
||||||
|
* get:
|
||||||
|
* summary: Retrieve an image by project and order ID
|
||||||
|
* parameters:
|
||||||
|
* - in: path
|
||||||
|
* name: projectId
|
||||||
|
* required: true
|
||||||
|
* schema:
|
||||||
|
* type: string
|
||||||
|
* description: The project ID
|
||||||
|
* - in: path
|
||||||
|
* name: orderId
|
||||||
|
* required: true
|
||||||
|
* schema:
|
||||||
|
* type: string
|
||||||
|
* description: The order ID
|
||||||
|
* responses:
|
||||||
|
* 200:
|
||||||
|
* description: An image file
|
||||||
|
* content:
|
||||||
|
* application/octet-stream:
|
||||||
|
* schema:
|
||||||
|
* type: string
|
||||||
|
* format: binary
|
||||||
|
* 404:
|
||||||
|
* description: Image not found
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @swagger
|
||||||
|
* /images/{measurementId}:
|
||||||
|
* get:
|
||||||
|
* summary: Retrieve an image by measurement ID
|
||||||
|
* parameters:
|
||||||
|
* - in: path
|
||||||
|
* name: measurementId
|
||||||
|
* required: true
|
||||||
|
* schema:
|
||||||
|
* type: string
|
||||||
|
* description: The measurement ID
|
||||||
|
* responses:
|
||||||
|
* 200:
|
||||||
|
* description: An image file
|
||||||
|
* content:
|
||||||
|
* application/octet-stream:
|
||||||
|
* schema:
|
||||||
|
* type: string
|
||||||
|
* format: binary
|
||||||
|
* 404:
|
||||||
|
* description: Image not found
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @swagger
|
||||||
|
* /preview/{projectId}/{orderId}:
|
||||||
|
* get:
|
||||||
|
* summary: Retrieve a preview of an image by project and order ID
|
||||||
|
* parameters:
|
||||||
|
* - in: path
|
||||||
|
* name: projectId
|
||||||
|
* required: true
|
||||||
|
* schema:
|
||||||
|
* type: string
|
||||||
|
* description: The project ID
|
||||||
|
* - in: path
|
||||||
|
* name: orderId
|
||||||
|
* required: true
|
||||||
|
* schema:
|
||||||
|
* type: string
|
||||||
|
* description: The order ID
|
||||||
|
* responses:
|
||||||
|
* 200:
|
||||||
|
* description: A resized preview of the image
|
||||||
|
* content:
|
||||||
|
* image/jpeg:
|
||||||
|
* schema:
|
||||||
|
* type: string
|
||||||
|
* format: binary
|
||||||
|
* 404:
|
||||||
|
* description: Image not found
|
||||||
|
* 500:
|
||||||
|
* description: Internal Server Error
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @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.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @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.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @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.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @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.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @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.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @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.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @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.
|
||||||
|
* requestBody:
|
||||||
|
* content:
|
||||||
|
* multipart/form-data:
|
||||||
|
* schema:
|
||||||
|
* type: object
|
||||||
|
* properties:
|
||||||
|
* image:
|
||||||
|
* type: string
|
||||||
|
* format: binary
|
||||||
|
* description: Fichier image à télécharger
|
||||||
|
* projectId:
|
||||||
|
* type: integer
|
||||||
|
* description: ID du projet
|
||||||
|
* timestamp:
|
||||||
|
* type: string
|
||||||
|
* format: date-time
|
||||||
|
* description: Horodatage de la mesure
|
||||||
|
* temperature:
|
||||||
|
* type: number
|
||||||
|
* description: Température mesurée
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @swagger
|
||||||
|
* /videos:
|
||||||
|
* get:
|
||||||
|
* summary: Récupérer toutes les vidéos
|
||||||
|
* description: Récupère toutes les vidéos de la base de données.
|
||||||
|
* responses:
|
||||||
|
* 200:
|
||||||
|
* description: Une liste de vidéos.
|
||||||
|
* content:
|
||||||
|
* application/json:
|
||||||
|
* schema:
|
||||||
|
* type: array
|
||||||
|
* items:
|
||||||
|
* type: object
|
||||||
|
* properties:
|
||||||
|
* id:
|
||||||
|
* type: integer
|
||||||
|
* project_id:
|
||||||
|
* type: integer
|
||||||
|
* measurement_ids:
|
||||||
|
* type: string
|
||||||
|
* video_path:
|
||||||
|
* type: string
|
||||||
|
* start_timestamp:
|
||||||
|
* type: string
|
||||||
|
* end_timestamp:
|
||||||
|
* type: string
|
||||||
|
* image_count:
|
||||||
|
* type: integer
|
||||||
|
* resolution:
|
||||||
|
* type: string
|
||||||
|
* duration:
|
||||||
|
* type: number
|
||||||
|
* fps:
|
||||||
|
* type: number
|
||||||
|
* status:
|
||||||
|
* type: integer
|
||||||
|
* name:
|
||||||
|
* type: string
|
||||||
|
* 500:
|
||||||
|
* description: Erreur serveur.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @swagger
|
||||||
|
* /videos/{id}:
|
||||||
|
* get:
|
||||||
|
* summary: Récupérer une vidéo par ID
|
||||||
|
* description: Récupère une vidéo spécifique en utilisant son ID.
|
||||||
|
* parameters:
|
||||||
|
* - in: path
|
||||||
|
* name: id
|
||||||
|
* schema:
|
||||||
|
* type: integer
|
||||||
|
* required: true
|
||||||
|
* description: ID de la vidéo
|
||||||
|
* responses:
|
||||||
|
* 200:
|
||||||
|
* description: Une vidéo.
|
||||||
|
* content:
|
||||||
|
* application/json:
|
||||||
|
* schema:
|
||||||
|
* type: object
|
||||||
|
* properties:
|
||||||
|
* id:
|
||||||
|
* type: integer
|
||||||
|
* project_id:
|
||||||
|
* type: integer
|
||||||
|
* measurement_ids:
|
||||||
|
* type: string
|
||||||
|
* video_path:
|
||||||
|
* type: string
|
||||||
|
* start_timestamp:
|
||||||
|
* type: string
|
||||||
|
* end_timestamp:
|
||||||
|
* type: string
|
||||||
|
* image_count:
|
||||||
|
* type: integer
|
||||||
|
* resolution:
|
||||||
|
* type: string
|
||||||
|
* duration:
|
||||||
|
* type: number
|
||||||
|
* fps:
|
||||||
|
* type: number
|
||||||
|
* status:
|
||||||
|
* type: integer
|
||||||
|
* name:
|
||||||
|
* type: string
|
||||||
|
* 400:
|
||||||
|
* description: ID de vidéo invalide.
|
||||||
|
* 500:
|
||||||
|
* description: Erreur serveur.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @swagger
|
||||||
|
* /videos:
|
||||||
|
* post:
|
||||||
|
* summary: Créer une nouvelle vidéo
|
||||||
|
* description: Crée une nouvelle vidéo avec les informations fournies.
|
||||||
|
* requestBody:
|
||||||
|
* required: true
|
||||||
|
* content:
|
||||||
|
* application/json:
|
||||||
|
* schema:
|
||||||
|
* type: object
|
||||||
|
* properties:
|
||||||
|
* project_id:
|
||||||
|
* type: integer
|
||||||
|
* measurement_ids:
|
||||||
|
* type: string
|
||||||
|
* name:
|
||||||
|
* type: string
|
||||||
|
* resolution:
|
||||||
|
* type: string
|
||||||
|
* duration:
|
||||||
|
* type: number
|
||||||
|
* responses:
|
||||||
|
* 200:
|
||||||
|
* description: Vidéo créée avec succès.
|
||||||
|
* content:
|
||||||
|
* application/json:
|
||||||
|
* schema:
|
||||||
|
* type: object
|
||||||
|
* properties:
|
||||||
|
* message:
|
||||||
|
* type: string
|
||||||
|
* video:
|
||||||
|
* type: object
|
||||||
|
* properties:
|
||||||
|
* project_id:
|
||||||
|
* type: integer
|
||||||
|
* measurement_ids:
|
||||||
|
* type: string
|
||||||
|
* name:
|
||||||
|
* type: string
|
||||||
|
* resolution:
|
||||||
|
* type: string
|
||||||
|
* duration:
|
||||||
|
* type: number
|
||||||
|
* 400:
|
||||||
|
* description: Tous les champs sont requis.
|
||||||
|
* 500:
|
||||||
|
* description: Erreur serveur.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @swagger
|
||||||
|
* /videos/{id}:
|
||||||
|
* delete:
|
||||||
|
* summary: Supprimer une vidéo par ID
|
||||||
|
* description: Supprime une vidéo spécifique en utilisant son ID.
|
||||||
|
* parameters:
|
||||||
|
* - in: path
|
||||||
|
* name: id
|
||||||
|
* schema:
|
||||||
|
* type: integer
|
||||||
|
* required: true
|
||||||
|
* description: ID de la vidéo
|
||||||
|
* responses:
|
||||||
|
* 200:
|
||||||
|
* description: Vidéo supprimée avec succès.
|
||||||
|
* 400:
|
||||||
|
* description: ID de vidéo invalide.
|
||||||
|
* 404:
|
||||||
|
* description: Aucune vidéo trouvée avec cet ID.
|
||||||
|
* 500:
|
||||||
|
* description: Erreur serveur.
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @swagger
|
||||||
|
* /videos/file/{video_id}:
|
||||||
|
* get:
|
||||||
|
* summary: Retrieve a video by video ID
|
||||||
|
* parameters:
|
||||||
|
* - in: path
|
||||||
|
* name: video_id
|
||||||
|
* required: true
|
||||||
|
* schema:
|
||||||
|
* type: string
|
||||||
|
* description: The video ID
|
||||||
|
* responses:
|
||||||
|
* 200:
|
||||||
|
* description: A video file
|
||||||
|
* content:
|
||||||
|
* application/octet-stream:
|
||||||
|
* schema:
|
||||||
|
* type: string
|
||||||
|
* format: binary
|
||||||
|
* 404:
|
||||||
|
* description: Video not found
|
||||||
|
* 400:
|
||||||
|
* description: Video not yet produced
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @swagger
|
||||||
|
* /videos/render/{video_id}:
|
||||||
|
* post:
|
||||||
|
* summary: Render a video by video ID
|
||||||
|
* parameters:
|
||||||
|
* - in: path
|
||||||
|
* name: video_id
|
||||||
|
* required: true
|
||||||
|
* schema:
|
||||||
|
* type: string
|
||||||
|
* description: The video ID
|
||||||
|
* responses:
|
||||||
|
* 200:
|
||||||
|
* description: Render process started
|
||||||
|
* 404:
|
||||||
|
* description: Video not found
|
||||||
|
* 500:
|
||||||
|
* description: Server error
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @swagger
|
||||||
|
* /videos/reset/{video_id}:
|
||||||
|
* get:
|
||||||
|
* summary: Reset the status of a video by video ID
|
||||||
|
* parameters:
|
||||||
|
* - in: path
|
||||||
|
* name: video_id
|
||||||
|
* required: true
|
||||||
|
* schema:
|
||||||
|
* type: string
|
||||||
|
* description: The video ID
|
||||||
|
* responses:
|
||||||
|
* 200:
|
||||||
|
* description: Video reset successfully
|
||||||
|
* 404:
|
||||||
|
* description: Video not found
|
||||||
|
* 500:
|
||||||
|
* description: Server error
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @swagger
|
||||||
|
* /cat:
|
||||||
|
* get:
|
||||||
|
* summary: Retrieve a cat video
|
||||||
|
* responses:
|
||||||
|
* 200:
|
||||||
|
* description: A cat video
|
||||||
|
* content:
|
||||||
|
* application/octet-stream:
|
||||||
|
* schema:
|
||||||
|
* type: string
|
||||||
|
* format: binary
|
||||||
|
* 404:
|
||||||
|
* description: Video not found
|
||||||
|
*/
|
||||||
|
|||||||
@@ -6,54 +6,6 @@ const serverError = require('../utils/serverError');
|
|||||||
|
|
||||||
const upload = multer({ storage: multer.memoryStorage() });
|
const upload = multer({ storage: multer.memoryStorage() });
|
||||||
|
|
||||||
/**
|
|
||||||
* @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.
|
|
||||||
* requestBody:
|
|
||||||
* content:
|
|
||||||
* multipart/form-data:
|
|
||||||
* schema:
|
|
||||||
* type: object
|
|
||||||
* properties:
|
|
||||||
* image:
|
|
||||||
* type: string
|
|
||||||
* format: binary
|
|
||||||
* description: Fichier image à télécharger
|
|
||||||
* projectId:
|
|
||||||
* type: integer
|
|
||||||
* description: ID du projet
|
|
||||||
* timestamp:
|
|
||||||
* type: string
|
|
||||||
* format: date-time
|
|
||||||
* description: Horodatage de la mesure
|
|
||||||
* temperature:
|
|
||||||
* type: number
|
|
||||||
* description: Température mesurée
|
|
||||||
* 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) => {
|
router.post('/uploadmeasurement', upload.single('image'), async (req, res) => {
|
||||||
const { projectId, timestamp, temperature, humidity } = req.body;
|
const { projectId, timestamp, temperature, humidity } = req.body;
|
||||||
const image = req.file;
|
const image = req.file;
|
||||||
|
|||||||
@@ -9,49 +9,6 @@ const videoManager = require('../src/video/videoManager');
|
|||||||
const measureManager = require('../src/measure/measureManager');
|
const measureManager = require('../src/measure/measureManager');
|
||||||
const dbTester = require('../test/tester');
|
const dbTester = require('../test/tester');
|
||||||
|
|
||||||
/**
|
|
||||||
* @swagger
|
|
||||||
* /videos:
|
|
||||||
* get:
|
|
||||||
* summary: Récupérer toutes les vidéos
|
|
||||||
* description: Récupère toutes les vidéos de la base de données.
|
|
||||||
* responses:
|
|
||||||
* 200:
|
|
||||||
* description: Une liste de vidéos.
|
|
||||||
* content:
|
|
||||||
* application/json:
|
|
||||||
* schema:
|
|
||||||
* type: array
|
|
||||||
* items:
|
|
||||||
* type: object
|
|
||||||
* properties:
|
|
||||||
* id:
|
|
||||||
* type: integer
|
|
||||||
* project_id:
|
|
||||||
* type: integer
|
|
||||||
* measurement_ids:
|
|
||||||
* type: string
|
|
||||||
* video_path:
|
|
||||||
* type: string
|
|
||||||
* start_timestamp:
|
|
||||||
* type: string
|
|
||||||
* end_timestamp:
|
|
||||||
* type: string
|
|
||||||
* image_count:
|
|
||||||
* type: integer
|
|
||||||
* resolution:
|
|
||||||
* type: string
|
|
||||||
* duration:
|
|
||||||
* type: number
|
|
||||||
* fps:
|
|
||||||
* type: number
|
|
||||||
* status:
|
|
||||||
* type: integer
|
|
||||||
* name:
|
|
||||||
* type: string
|
|
||||||
* 500:
|
|
||||||
* description: Erreur serveur.
|
|
||||||
*/
|
|
||||||
router.get('/videos', (req, res) => {
|
router.get('/videos', (req, res) => {
|
||||||
const query = 'SELECT * FROM public.videos';
|
const query = 'SELECT * FROM public.videos';
|
||||||
db.query(query, (err, results) => {
|
db.query(query, (err, results) => {
|
||||||
@@ -62,56 +19,6 @@ router.get('/videos', (req, res) => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* @swagger
|
|
||||||
* /videos/{id}:
|
|
||||||
* get:
|
|
||||||
* summary: Récupérer une vidéo par ID
|
|
||||||
* description: Récupère une vidéo spécifique en utilisant son ID.
|
|
||||||
* parameters:
|
|
||||||
* - in: path
|
|
||||||
* name: id
|
|
||||||
* schema:
|
|
||||||
* type: integer
|
|
||||||
* required: true
|
|
||||||
* description: ID de la vidéo
|
|
||||||
* responses:
|
|
||||||
* 200:
|
|
||||||
* description: Une vidéo.
|
|
||||||
* content:
|
|
||||||
* application/json:
|
|
||||||
* schema:
|
|
||||||
* type: object
|
|
||||||
* properties:
|
|
||||||
* id:
|
|
||||||
* type: integer
|
|
||||||
* project_id:
|
|
||||||
* type: integer
|
|
||||||
* measurement_ids:
|
|
||||||
* type: string
|
|
||||||
* video_path:
|
|
||||||
* type: string
|
|
||||||
* start_timestamp:
|
|
||||||
* type: string
|
|
||||||
* end_timestamp:
|
|
||||||
* type: string
|
|
||||||
* image_count:
|
|
||||||
* type: integer
|
|
||||||
* resolution:
|
|
||||||
* type: string
|
|
||||||
* duration:
|
|
||||||
* type: number
|
|
||||||
* fps:
|
|
||||||
* type: number
|
|
||||||
* status:
|
|
||||||
* type: integer
|
|
||||||
* name:
|
|
||||||
* type: string
|
|
||||||
* 400:
|
|
||||||
* description: ID de vidéo invalide.
|
|
||||||
* 500:
|
|
||||||
* description: Erreur serveur.
|
|
||||||
*/
|
|
||||||
router.get('/videos/:id', (req, res) => {
|
router.get('/videos/:id', (req, res) => {
|
||||||
const videoId = req.params.id;
|
const videoId = req.params.id;
|
||||||
if (!videoId || isNaN(videoId)) {
|
if (!videoId || isNaN(videoId)) {
|
||||||
@@ -126,57 +33,6 @@ router.get('/videos/:id', (req, res) => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* @swagger
|
|
||||||
* /videos:
|
|
||||||
* post:
|
|
||||||
* summary: Créer une nouvelle vidéo
|
|
||||||
* description: Crée une nouvelle vidéo avec les informations fournies.
|
|
||||||
* requestBody:
|
|
||||||
* required: true
|
|
||||||
* content:
|
|
||||||
* application/json:
|
|
||||||
* schema:
|
|
||||||
* type: object
|
|
||||||
* properties:
|
|
||||||
* project_id:
|
|
||||||
* type: integer
|
|
||||||
* measurement_ids:
|
|
||||||
* type: string
|
|
||||||
* name:
|
|
||||||
* type: string
|
|
||||||
* resolution:
|
|
||||||
* type: string
|
|
||||||
* duration:
|
|
||||||
* type: number
|
|
||||||
* responses:
|
|
||||||
* 200:
|
|
||||||
* description: Vidéo créée avec succès.
|
|
||||||
* content:
|
|
||||||
* application/json:
|
|
||||||
* schema:
|
|
||||||
* type: object
|
|
||||||
* properties:
|
|
||||||
* message:
|
|
||||||
* type: string
|
|
||||||
* video:
|
|
||||||
* type: object
|
|
||||||
* properties:
|
|
||||||
* project_id:
|
|
||||||
* type: integer
|
|
||||||
* measurement_ids:
|
|
||||||
* type: string
|
|
||||||
* name:
|
|
||||||
* type: string
|
|
||||||
* resolution:
|
|
||||||
* type: string
|
|
||||||
* duration:
|
|
||||||
* type: number
|
|
||||||
* 400:
|
|
||||||
* description: Tous les champs sont requis.
|
|
||||||
* 500:
|
|
||||||
* description: Erreur serveur.
|
|
||||||
*/
|
|
||||||
router.post('/videos', async (req, res) => {
|
router.post('/videos', async (req, res) => {
|
||||||
const { project_id, measurement_ids, name, resolution, duration } = req.body;
|
const { project_id, measurement_ids, name, resolution, duration } = req.body;
|
||||||
console.log('Creating video:', req.body);
|
console.log('Creating video:', req.body);
|
||||||
@@ -196,29 +52,6 @@ router.post('/videos', async (req, res) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @swagger
|
|
||||||
* /videos/{id}:
|
|
||||||
* delete:
|
|
||||||
* summary: Supprimer une vidéo par ID
|
|
||||||
* description: Supprime une vidéo spécifique en utilisant son ID.
|
|
||||||
* parameters:
|
|
||||||
* - in: path
|
|
||||||
* name: id
|
|
||||||
* schema:
|
|
||||||
* type: integer
|
|
||||||
* required: true
|
|
||||||
* description: ID de la vidéo
|
|
||||||
* responses:
|
|
||||||
* 200:
|
|
||||||
* description: Vidéo supprimée avec succès.
|
|
||||||
* 400:
|
|
||||||
* description: ID de vidéo invalide.
|
|
||||||
* 404:
|
|
||||||
* description: Aucune vidéo trouvée avec cet ID.
|
|
||||||
* 500:
|
|
||||||
* description: Erreur serveur.
|
|
||||||
*/
|
|
||||||
router.delete('/videos/:id', (req, res) => {
|
router.delete('/videos/:id', (req, res) => {
|
||||||
const videoId = req.params.id;
|
const videoId = req.params.id;
|
||||||
if (!videoId || isNaN(videoId)) {
|
if (!videoId || isNaN(videoId)) {
|
||||||
@@ -231,31 +64,6 @@ router.delete('/videos/:id', (req, res) => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* @swagger
|
|
||||||
* /videos/file/{video_id}:
|
|
||||||
* get:
|
|
||||||
* summary: Retrieve a video by video ID
|
|
||||||
* parameters:
|
|
||||||
* - in: path
|
|
||||||
* name: video_id
|
|
||||||
* required: true
|
|
||||||
* schema:
|
|
||||||
* type: string
|
|
||||||
* description: The video ID
|
|
||||||
* responses:
|
|
||||||
* 200:
|
|
||||||
* description: A video file
|
|
||||||
* content:
|
|
||||||
* application/octet-stream:
|
|
||||||
* schema:
|
|
||||||
* type: string
|
|
||||||
* format: binary
|
|
||||||
* 404:
|
|
||||||
* description: Video not found
|
|
||||||
* 400:
|
|
||||||
* description: Video not yet produced
|
|
||||||
*/
|
|
||||||
router.get('/videos/file/:video_id', (req, res) => {
|
router.get('/videos/file/:video_id', (req, res) => {
|
||||||
const videoId = req.params.video_id;
|
const videoId = req.params.video_id;
|
||||||
const query = 'SELECT video_file, status FROM public.videos WHERE id = $1';
|
const query = 'SELECT video_file, status FROM public.videos WHERE id = $1';
|
||||||
@@ -326,26 +134,6 @@ function serveFallbackVideo(res) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @swagger
|
|
||||||
* /videos/render/{video_id}:
|
|
||||||
* post:
|
|
||||||
* summary: Render a video by video ID
|
|
||||||
* parameters:
|
|
||||||
* - in: path
|
|
||||||
* name: video_id
|
|
||||||
* required: true
|
|
||||||
* schema:
|
|
||||||
* type: string
|
|
||||||
* description: The video ID
|
|
||||||
* responses:
|
|
||||||
* 200:
|
|
||||||
* description: Render process started
|
|
||||||
* 404:
|
|
||||||
* description: Video not found
|
|
||||||
* 500:
|
|
||||||
* description: Server error
|
|
||||||
*/
|
|
||||||
router.post('/videos/render/:video_id', async (req, res) => {
|
router.post('/videos/render/:video_id', async (req, res) => {
|
||||||
const videoId = req.params.video_id;
|
const videoId = req.params.video_id;
|
||||||
const query = 'SELECT measurement_ids, project_id, duration FROM public.videos WHERE id = $1';
|
const query = 'SELECT measurement_ids, project_id, duration FROM public.videos WHERE id = $1';
|
||||||
@@ -386,26 +174,6 @@ router.post('/videos/render/:video_id', async (req, res) => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* @swagger
|
|
||||||
* /videos/reset/{video_id}:
|
|
||||||
* get:
|
|
||||||
* summary: Reset the status of a video by video ID
|
|
||||||
* parameters:
|
|
||||||
* - in: path
|
|
||||||
* name: video_id
|
|
||||||
* required: true
|
|
||||||
* schema:
|
|
||||||
* type: string
|
|
||||||
* description: The video ID
|
|
||||||
* responses:
|
|
||||||
* 200:
|
|
||||||
* description: Video reset successfully
|
|
||||||
* 404:
|
|
||||||
* description: Video not found
|
|
||||||
* 500:
|
|
||||||
* description: Server error
|
|
||||||
*/
|
|
||||||
router.get('/videos/reset/:video_id', (req, res) => {
|
router.get('/videos/reset/:video_id', (req, res) => {
|
||||||
const videoId = req.params.video_id;
|
const videoId = req.params.video_id;
|
||||||
const query = 'SELECT video_file FROM public.videos WHERE id = $1';
|
const query = 'SELECT video_file FROM public.videos WHERE id = $1';
|
||||||
@@ -437,22 +205,6 @@ router.get('/videos/reset/:video_id', (req, res) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @swagger
|
|
||||||
* /cat:
|
|
||||||
* get:
|
|
||||||
* summary: Retrieve a cat video
|
|
||||||
* responses:
|
|
||||||
* 200:
|
|
||||||
* description: A cat video
|
|
||||||
* content:
|
|
||||||
* application/octet-stream:
|
|
||||||
* schema:
|
|
||||||
* type: string
|
|
||||||
* format: binary
|
|
||||||
* 404:
|
|
||||||
* description: Video not found
|
|
||||||
*/
|
|
||||||
router.get('/cat', (_, res) => {
|
router.get('/cat', (_, res) => {
|
||||||
const videoPath = dbTester.getCatVideo();
|
const videoPath = dbTester.getCatVideo();
|
||||||
fs.access(videoPath, fs.constants.F_OK, (err) => {
|
fs.access(videoPath, fs.constants.F_OK, (err) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user