Files
timelapse-backend/routes/projectRoutes.js

205 lines
5.9 KiB
JavaScript

const express = require('express');
const router = express.Router();
const projectManager = require('../src/project/projectManager');
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) => {
try {
const projects = await projectManager.getAllProjects();
res.json(projects);
} catch (error) {
serverError.sendError('Error getting all projects:', res, error);
}
});
/**
* @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) => {
const projectId = req.params.id;
if (!projectId || isNaN(projectId)) {
return res.status(400).json({ error: 'Invalid project ID' });
}
try {
const project = await projectManager.getProjectById(projectId);
res.json(project);
} catch (error) {
serverError.sendError('Error getting project by ID:', res, error);
}
});
/**
* @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) => {
const projectId = req.params.id;
if (!projectId || isNaN(projectId)) {
return res.status(400).json({ error: 'Invalid project ID' });
}
try {
const videos = await projectManager.getVideosByProjectId(projectId);
res.json(videos);
} catch (error) {
serverError.sendError('Error getting videos by project ID:', res, error);
}
});
/**
* @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) => {
const projectId = req.params.id;
if (!projectId || isNaN(projectId)) {
return res.status(400).json({ error: 'Invalid project ID' });
}
try {
const measurements = await projectManager.getMeasurementsByProjectId(projectId);
res.json(measurements);
} catch (error) {
serverError.sendError('Error getting measurements by project ID:', res, error);
}
});
/**
* @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) => {
const { name, description } = req.body;
if (!name || !description) {
return res.status(400).json({ error: 'Name and description are required' });
}
try {
const project = await projectManager.createProject(name, description, new Date(), 0);
projectManager.createProjectDirectory(project.id);
res.status(201).json({ message: 'Project added successfully', id: project.id });
} catch (error) {
serverError.sendError('Error creating project:', res, error);
}
});
router.delete('/projects/:id', async (req, res) => {
const projectId = req.params.id;
if (!projectId || isNaN(projectId)) {
return res.status(400).json({ error: 'Invalid project ID' });
}
try {
projectManager.deleteProjectDirectory(projectId);
projectManager.deleteProjectById(projectId);
res.status(200).json({ message: 'Project deleted successfully', id: projectId });
} catch (error) {
serverError.sendError('Error deleting project:', res, error);
}
});
module.exports = router;