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); } }); /** * @swagger * /projects/{id}: * delete: * summary: Supprimer un projet par ID * description: Supprime 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: Projet supprimé avec succès. * 400: * description: ID de projet invalide. * 500: * description: Erreur serveur. */ 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;