Suppression du fichier Swagger pour le schéma de mesure et mise à jour des descriptions dans les routes d'images et de projets
This commit is contained in:
@@ -13,7 +13,7 @@ const serverError = require('../utils/serverError');
|
|||||||
* summary: Retrieve a smile image
|
* summary: Retrieve a smile image
|
||||||
* responses:
|
* responses:
|
||||||
* 200:
|
* 200:
|
||||||
* description: Smile image retrieved successfully
|
* description: A smile image
|
||||||
* content:
|
* content:
|
||||||
* image/jpeg:
|
* image/jpeg:
|
||||||
* schema:
|
* schema:
|
||||||
@@ -23,67 +23,65 @@ const serverError = require('../utils/serverError');
|
|||||||
* description: Image not found
|
* 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) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
console.error('Image not found:', err);
|
console.error('Image not found:', err);
|
||||||
return res.status(404).json({ error: 'Image not found' });
|
return res.status(404).json({ error: 'Image not found' });
|
||||||
}
|
}
|
||||||
res.sendFile(imagePath);
|
res.sendFile(imagePath);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @swagger
|
* @swagger
|
||||||
* /images/{projectId}/{orderId}:
|
* /images/{projectId}/{orderId}:
|
||||||
* get:
|
* get:
|
||||||
* summary: Retrieve an image by project ID and order ID
|
* summary: Retrieve an image by project and order ID
|
||||||
* parameters:
|
* parameters:
|
||||||
* - in: path
|
* - in: path
|
||||||
* name: projectId
|
* name: projectId
|
||||||
* required: true
|
* required: true
|
||||||
* schema:
|
* schema:
|
||||||
* type: string
|
* type: string
|
||||||
* description: The ID of the project
|
* description: The project ID
|
||||||
* - in: path
|
* - in: path
|
||||||
* name: orderId
|
* name: orderId
|
||||||
* required: true
|
* required: true
|
||||||
* schema:
|
* schema:
|
||||||
* type: string
|
* type: string
|
||||||
* description: The ID of the order
|
* description: The order ID
|
||||||
* responses:
|
* responses:
|
||||||
* 200:
|
* 200:
|
||||||
* description: Image retrieved successfully
|
* description: An image file
|
||||||
* content:
|
* content:
|
||||||
* image/jpeg:
|
* application/octet-stream:
|
||||||
* schema:
|
* schema:
|
||||||
* type: string
|
* type: string
|
||||||
* format: binary
|
* format: binary
|
||||||
* 404:
|
* 404:
|
||||||
* description: Image not found
|
* description: Image not found
|
||||||
* 500:
|
|
||||||
* description: Internal server error
|
|
||||||
*/
|
*/
|
||||||
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;
|
||||||
const query = 'SELECT path FROM public.measurements WHERE project_id = $1 AND order_id = $2';
|
const query = 'SELECT path FROM public.measurements WHERE project_id = $1 AND order_id = $2';
|
||||||
db.query(query, [projectId, orderId], (err, results) => {
|
db.query(query, [projectId, orderId], (err, results) => {
|
||||||
if (err) {
|
|
||||||
return serverError.sendError('Error getting image:', res, err);
|
|
||||||
}
|
|
||||||
if (results.rows.length === 0) {
|
|
||||||
return res.status(404).json({ error: 'Image not found' });
|
|
||||||
}
|
|
||||||
const imagePath = results.rows[0].path;
|
|
||||||
fs.access(imagePath, fs.constants.F_OK, (err) => {
|
|
||||||
if (err) {
|
if (err) {
|
||||||
console.error('Image not found:', err);
|
return serverError.sendError('Error getting image:', res, err);
|
||||||
return res.status(404).json({ error: 'Image not found' });
|
|
||||||
}
|
}
|
||||||
res.download(imagePath);
|
if (results.rows.length === 0) {
|
||||||
});
|
return res.status(404).json({ error: 'Image not found' });
|
||||||
});
|
}
|
||||||
|
const imagePath = results.rows[0].path;
|
||||||
|
fs.access(imagePath, fs.constants.F_OK, (err) => {
|
||||||
|
if (err) {
|
||||||
|
console.error('Image not found:', err);
|
||||||
|
return res.status(404).json({ error: 'Image not found' });
|
||||||
|
}
|
||||||
|
res.download(imagePath);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
||||||
|
|||||||
@@ -18,18 +18,32 @@ const serverError = require('../utils/serverError');
|
|||||||
* schema:
|
* schema:
|
||||||
* type: array
|
* type: array
|
||||||
* items:
|
* items:
|
||||||
* $ref: '#/components/schemas/Measurement'
|
* 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:
|
* 500:
|
||||||
* description: Erreur serveur.
|
* 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) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
serverError.sendError('Erreur lors de la récupération des mesures:', res, err);
|
serverError.sendError('Erreur lors de la récupération des mesures:', res, err);
|
||||||
}
|
}
|
||||||
res.json(results.rows);
|
res.json(results.rows);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -51,24 +65,38 @@ router.get('/measurements', (req, res) => {
|
|||||||
* content:
|
* content:
|
||||||
* application/json:
|
* application/json:
|
||||||
* schema:
|
* schema:
|
||||||
* $ref: '#/components/schemas/Measurement'
|
* 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:
|
* 400:
|
||||||
* description: ID de mesure invalide.
|
* description: ID de mesure invalide.
|
||||||
* 500:
|
* 500:
|
||||||
* description: Erreur serveur.
|
* 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)) {
|
||||||
return res.status(400).json({ error: 'Invalid measurement ID' });
|
return res.status(400).json({ error: 'Invalid measurement ID' });
|
||||||
}
|
}
|
||||||
const query = 'SELECT * FROM public.measurements WHERE id = $1';
|
const query = 'SELECT * FROM public.measurements WHERE id = $1';
|
||||||
db.query(query, [measurementId], (err, results) => {
|
db.query(query, [measurementId], (err, results) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
serverError.sendError('Erreur lors de la récupération de la mesure:', res, err);
|
serverError.sendError('Erreur lors de la récupération de la mesure:', res, err);
|
||||||
}
|
}
|
||||||
res.json(results.rows);
|
res.json(results.rows);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -96,24 +124,38 @@ router.get('/measurements/:id', (req, res) => {
|
|||||||
* content:
|
* content:
|
||||||
* application/json:
|
* application/json:
|
||||||
* schema:
|
* schema:
|
||||||
* $ref: '#/components/schemas/Measurement'
|
* 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:
|
* 400:
|
||||||
* description: ID de projet ou de commande invalide.
|
* description: ID de projet ou de commande invalide.
|
||||||
* 500:
|
* 500:
|
||||||
* description: Erreur serveur.
|
* 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;
|
||||||
if (!projectId || isNaN(projectId) || !orderId || isNaN(orderId)) {
|
if (!projectId || isNaN(projectId) || !orderId || isNaN(orderId)) {
|
||||||
return res.status(400).json({ error: 'Invalid project ID or order ID' });
|
return res.status(400).json({ error: 'Invalid project ID or order ID' });
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const measurement = await measureManager.getMeasurement(projectId, orderId);
|
const measurement = await measureManager.getMeasurement(projectId, orderId);
|
||||||
res.json(measurement);
|
res.json(measurement);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
serverError.sendError('Error getting measurement:', res, error);
|
serverError.sendError('Error getting measurement:', res, error);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -149,17 +191,17 @@ router.get('/measurements/:projectId/:orderId', async (req, res) => {
|
|||||||
* description: Erreur serveur.
|
* 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) {
|
||||||
return res.status(400).json({ error: 'All fields are required' });
|
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';
|
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) => {
|
db.query(query, [project_id, timestamp, image_path, temperature, humidity], (err, results) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
serverError.sendError('Erreur lors de l\'ajout de la mesure:', res, 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 });
|
res.status(201).json({ message: 'Mesure ajoutée avec succès', id: results.rows[0].id });
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -184,16 +226,16 @@ router.post('/measurements', (req, res) => {
|
|||||||
* description: Erreur serveur.
|
* 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)) {
|
||||||
return res.status(400).json({ error: 'Invalid measurement ID' });
|
return res.status(400).json({ error: 'Invalid measurement ID' });
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const measurement = await measureManager.deleteMeasurement(measurementId);
|
const measurement = await measureManager.deleteMeasurement(measurementId);
|
||||||
res.status(200).json({ message: 'Measurement deleted successfully', id: measurementId });
|
res.status(200).json({ message: 'Measurement deleted successfully', id: measurementId });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
serverError.sendError('Error deleting measurement:', res, error);
|
serverError.sendError('Error deleting measurement:', res, error);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -224,17 +266,17 @@ router.delete('/measurements/:id', async (req, res) => {
|
|||||||
* description: Erreur serveur.
|
* 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;
|
||||||
if (!projectId || isNaN(projectId) || !orderId || isNaN(orderId)) {
|
if (!projectId || isNaN(projectId) || !orderId || isNaN(orderId)) {
|
||||||
return res.status(400).json({ error: 'Invalid project ID or order ID' });
|
return res.status(400).json({ error: 'Invalid project ID or order ID' });
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const measurement = await measureManager.deleteMeasurementByOrderId(projectId, orderId);
|
const measurement = await measureManager.deleteMeasurementByOrderId(projectId, orderId);
|
||||||
res.status(200).json({ message: 'Measurement deleted successfully', id: measurement.id });
|
res.status(200).json({ message: 'Measurement deleted successfully', id: measurement.id });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
serverError.sendError('Error deleting measurement:', res, error);
|
serverError.sendError('Error deleting measurement:', res, error);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
||||||
|
|||||||
@@ -17,17 +17,17 @@ const serverError = require('../utils/serverError');
|
|||||||
* schema:
|
* schema:
|
||||||
* type: array
|
* type: array
|
||||||
* items:
|
* items:
|
||||||
* $ref: '#/components/schemas/Project'
|
* type: object
|
||||||
* 500:
|
* 500:
|
||||||
* description: Erreur serveur.
|
* 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();
|
||||||
res.json(projects);
|
res.json(projects);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
serverError.sendError('Error getting all projects:', res, error);
|
serverError.sendError('Error getting all projects:', res, error);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -49,23 +49,23 @@ router.get('/projects', async (req, res) => {
|
|||||||
* content:
|
* content:
|
||||||
* application/json:
|
* application/json:
|
||||||
* schema:
|
* schema:
|
||||||
* $ref: '#/components/schemas/Project'
|
* type: object
|
||||||
* 400:
|
* 400:
|
||||||
* description: ID de projet invalide.
|
* description: ID de projet invalide.
|
||||||
* 500:
|
* 500:
|
||||||
* description: Erreur serveur.
|
* 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)) {
|
||||||
return res.status(400).json({ error: 'Invalid project ID' });
|
return res.status(400).json({ error: 'Invalid project ID' });
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const project = await projectManager.getProjectById(projectId);
|
const project = await projectManager.getProjectById(projectId);
|
||||||
res.json(project);
|
res.json(project);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
serverError.sendError('Error getting project by ID:', res, error);
|
serverError.sendError('Error getting project by ID:', res, error);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -89,23 +89,23 @@ router.get('/projects/:id', async (req, res) => {
|
|||||||
* schema:
|
* schema:
|
||||||
* type: array
|
* type: array
|
||||||
* items:
|
* items:
|
||||||
* $ref: '#/components/schemas/Video'
|
* type: object
|
||||||
* 400:
|
* 400:
|
||||||
* description: ID de projet invalide.
|
* description: ID de projet invalide.
|
||||||
* 500:
|
* 500:
|
||||||
* description: Erreur serveur.
|
* 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)) {
|
||||||
return res.status(400).json({ error: 'Invalid project ID' });
|
return res.status(400).json({ error: 'Invalid project ID' });
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const videos = await projectManager.getVideosByProjectId(projectId);
|
const videos = await projectManager.getVideosByProjectId(projectId);
|
||||||
res.json(videos);
|
res.json(videos);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
serverError.sendError('Error getting videos by project ID:', res, error);
|
serverError.sendError('Error getting videos by project ID:', res, error);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -129,23 +129,23 @@ router.get('/projects/:id/videos', async (req, res) => {
|
|||||||
* schema:
|
* schema:
|
||||||
* type: array
|
* type: array
|
||||||
* items:
|
* items:
|
||||||
* $ref: '#/components/schemas/Measurement'
|
* type: object
|
||||||
* 400:
|
* 400:
|
||||||
* description: ID de projet invalide.
|
* description: ID de projet invalide.
|
||||||
* 500:
|
* 500:
|
||||||
* description: Erreur serveur.
|
* 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)) {
|
||||||
return res.status(400).json({ error: 'Invalid project ID' });
|
return res.status(400).json({ error: 'Invalid project ID' });
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const measurements = await projectManager.getMeasurementsByProjectId(projectId);
|
const measurements = await projectManager.getMeasurementsByProjectId(projectId);
|
||||||
res.json(measurements);
|
res.json(measurements);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
serverError.sendError('Error getting measurements by project ID:', res, error);
|
serverError.sendError('Error getting measurements by project ID:', res, error);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -174,17 +174,17 @@ router.get('/projects/:id/measurements', async (req, res) => {
|
|||||||
* description: Erreur serveur.
|
* 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) {
|
||||||
return res.status(400).json({ error: 'Name and description are required' });
|
return res.status(400).json({ error: 'Name and description are required' });
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
const project = await projectManager.createProject(name, description, new Date(), 0);
|
const project = await projectManager.createProject(name, description, new Date(), 0);
|
||||||
projectManager.createProjectDirectory(project.id);
|
projectManager.createProjectDirectory(project.id);
|
||||||
res.status(201).json({ message: 'Project added successfully', id: project.id });
|
res.status(201).json({ message: 'Project added successfully', id: project.id });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
serverError.sendError('Error creating project:', res, error);
|
serverError.sendError('Error creating project:', res, error);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -209,17 +209,17 @@ router.post('/projects', async (req, res) => {
|
|||||||
* description: Erreur serveur.
|
* description: Erreur serveur.
|
||||||
*/
|
*/
|
||||||
router.delete('/projects/:id', async (req, res) => {
|
router.delete('/projects/:id', async (req, res) => {
|
||||||
const projectId = req.params.id;
|
const projectId = req.params.id;
|
||||||
if (!projectId || isNaN(projectId)) {
|
if (!projectId || isNaN(projectId)) {
|
||||||
return res.status(400).json({ error: 'Invalid project ID' });
|
return res.status(400).json({ error: 'Invalid project ID' });
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
projectManager.deleteProjectDirectory(projectId);
|
projectManager.deleteProjectDirectory(projectId);
|
||||||
projectManager.deleteProjectById(projectId);
|
projectManager.deleteProjectById(projectId);
|
||||||
res.status(200).json({ message: 'Project deleted successfully', id: projectId });
|
res.status(200).json({ message: 'Project deleted successfully', id: projectId });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
serverError.sendError('Error deleting project:', res, error);
|
serverError.sendError('Error deleting project:', res, error);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
||||||
|
|||||||
@@ -1,27 +0,0 @@
|
|||||||
components:
|
|
||||||
schemas:
|
|
||||||
Measurement:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
id:
|
|
||||||
type: integer
|
|
||||||
description: The unique identifier for a measurement.
|
|
||||||
project_id:
|
|
||||||
type: integer
|
|
||||||
description: The ID of the project associated with the measurement.
|
|
||||||
timestamp:
|
|
||||||
type: string
|
|
||||||
format: date-time
|
|
||||||
description: The timestamp of the measurement.
|
|
||||||
image_path:
|
|
||||||
type: string
|
|
||||||
description: The path to the image associated with the measurement.
|
|
||||||
temperature:
|
|
||||||
type: number
|
|
||||||
description: The temperature recorded in the measurement.
|
|
||||||
humidity:
|
|
||||||
type: number
|
|
||||||
description: The humidity recorded in the measurement.
|
|
||||||
completed:
|
|
||||||
type: boolean
|
|
||||||
description: Indicates whether the measurement is completed.
|
|
||||||
@@ -17,18 +17,43 @@ const serverError = require('../utils/serverError');
|
|||||||
* schema:
|
* schema:
|
||||||
* type: array
|
* type: array
|
||||||
* items:
|
* items:
|
||||||
* $ref: '#/components/schemas/Video'
|
* 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:
|
* 500:
|
||||||
* description: Erreur serveur.
|
* 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) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
serverError.sendError('Erreur lors de la récupération des vidéos:', res, err);
|
serverError.sendError('Erreur lors de la récupération des vidéos:', res, err);
|
||||||
}
|
}
|
||||||
res.json(results.rows);
|
res.json(results.rows);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -50,24 +75,49 @@ router.get('/videos', (req, res) => {
|
|||||||
* content:
|
* content:
|
||||||
* application/json:
|
* application/json:
|
||||||
* schema:
|
* schema:
|
||||||
* $ref: '#/components/schemas/Video'
|
* 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:
|
* 400:
|
||||||
* description: ID de vidéo invalide.
|
* description: ID de vidéo invalide.
|
||||||
* 500:
|
* 500:
|
||||||
* description: Erreur serveur.
|
* 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)) {
|
||||||
return res.status(400).json({ error: 'Invalid video ID' });
|
return res.status(400).json({ error: 'Invalid video ID' });
|
||||||
}
|
}
|
||||||
const query = 'SELECT * FROM public.videos WHERE id = $1';
|
const query = 'SELECT * FROM public.videos WHERE id = $1';
|
||||||
db.query(query, [videoId], (err, results) => {
|
db.query(query, [videoId], (err, results) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
serverError.sendError('Erreur lors de la récupération de la vidéo:', res, err);
|
serverError.sendError('Erreur lors de la récupération de la vidéo:', res, err);
|
||||||
}
|
}
|
||||||
res.json(results.rows);
|
res.json(results.rows);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -104,40 +154,40 @@ router.get('/videos/:id', (req, res) => {
|
|||||||
* description: Erreur serveur.
|
* description: Erreur serveur.
|
||||||
*/
|
*/
|
||||||
router.post('/videos', (req, res) => {
|
router.post('/videos', (req, res) => {
|
||||||
const { project_id, measurement_ids, video_path, duration, resolution, name } = req.body;
|
const { project_id, measurement_ids, video_path, duration, resolution, name } = req.body;
|
||||||
if (!project_id || !measurement_ids || !video_path || !duration || !resolution || !name) {
|
if (!project_id || !measurement_ids || !video_path || !duration || !resolution || !name) {
|
||||||
return res.status(400).json({ error: 'All fields are required' });
|
return res.status(400).json({ error: 'All fields are required' });
|
||||||
}
|
}
|
||||||
|
|
||||||
const list_ids = measurement_ids.split(',');
|
const list_ids = measurement_ids.split(',');
|
||||||
const image_count = list_ids.length;
|
const image_count = list_ids.length;
|
||||||
const videoPath = '/videos/' + name + '.mp4';
|
const videoPath = '/videos/' + name + '.mp4';
|
||||||
|
|
||||||
const query_first = 'SELECT timestamp FROM public.measurements WHERE id = $1';
|
const query_first = 'SELECT timestamp FROM public.measurements WHERE id = $1';
|
||||||
const query_last = 'SELECT timestamp FROM public.measurements WHERE id = $1';
|
const query_last = 'SELECT timestamp FROM public.measurements WHERE id = $1';
|
||||||
|
|
||||||
db.query(query_first, [list_ids[0]], (err, results) => {
|
db.query(query_first, [list_ids[0]], (err, results) => {
|
||||||
if (err) {
|
|
||||||
serverError.sendError('Erreur lors de la récupération du timestamp de la première image:', res, err);
|
|
||||||
}
|
|
||||||
const start_timestamp = results.rows[0].timestamp;
|
|
||||||
|
|
||||||
db.query(query_last, [list_ids[image_count - 1]], (err, results) => {
|
|
||||||
if (err) {
|
if (err) {
|
||||||
serverError.sendError('Erreur lors de la récupération du timestamp de la dernière image:', res, err);
|
serverError.sendError('Erreur lors de la récupération du timestamp de la première image:', res, err);
|
||||||
}
|
}
|
||||||
const end_timestamp = results.rows[0].timestamp;
|
const start_timestamp = results.rows[0].timestamp;
|
||||||
const fps = image_count / duration;
|
|
||||||
|
|
||||||
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';
|
db.query(query_last, [list_ids[image_count - 1]], (err, results) => {
|
||||||
db.query(query, [project_id, measurement_ids, videoPath, start_timestamp, end_timestamp, image_count, resolution, duration, fps, 0, name], (err, results) => {
|
if (err) {
|
||||||
if (err) {
|
serverError.sendError('Erreur lors de la récupération du timestamp de la dernière image:', res, err);
|
||||||
serverError.sendError('Erreur lors de l\'ajout de la vidéo:', res, err);
|
}
|
||||||
}
|
const end_timestamp = results.rows[0].timestamp;
|
||||||
res.status(201).json({ message: 'Vidéo ajoutée avec succès', id: results.rows[0].id });
|
const fps = image_count / duration;
|
||||||
|
|
||||||
|
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';
|
||||||
|
db.query(query, [project_id, measurement_ids, videoPath, start_timestamp, end_timestamp, image_count, resolution, duration, fps, 0, name], (err, results) => {
|
||||||
|
if (err) {
|
||||||
|
serverError.sendError('Erreur lors de l\'ajout de la vidéo:', res, err);
|
||||||
|
}
|
||||||
|
res.status(201).json({ message: 'Vidéo ajoutée avec succès', id: results.rows[0].id });
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -164,20 +214,20 @@ router.post('/videos', (req, res) => {
|
|||||||
* description: Erreur serveur.
|
* 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)) {
|
||||||
return res.status(400).json({ error: 'Invalid video ID' });
|
return res.status(400).json({ error: 'Invalid video ID' });
|
||||||
}
|
}
|
||||||
const query = 'DELETE FROM public.videos WHERE id = $1 RETURNING id';
|
const query = 'DELETE FROM public.videos WHERE id = $1 RETURNING id';
|
||||||
db.query(query, [videoId], (err, results) => {
|
db.query(query, [videoId], (err, results) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
serverError.sendError('Erreur lors de la suppression de la vidéo:', res, err);
|
serverError.sendError('Erreur lors de la suppression de la vidéo:', res, err);
|
||||||
}
|
}
|
||||||
if (results.rowCount === 0) {
|
if (results.rowCount === 0) {
|
||||||
return res.status(404).json({ error: 'Aucune vidéo trouvée avec cet ID.' });
|
return res.status(404).json({ error: 'Aucune vidéo trouvée avec cet ID.' });
|
||||||
}
|
}
|
||||||
res.status(200).json({ message: 'Vidéo supprimée avec succès', id: videoId });
|
res.status(200).json({ message: 'Vidéo supprimée avec succès', id: videoId });
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
||||||
|
|||||||
Reference in New Issue
Block a user