feat(database): Implement DatabaseManager for managing database structure and initialization
All checks were successful
SSH Backend Deploy / ssh-deploy (push) Successful in 1m51s

feat(routes): Add camera, image, measurement, project, and video routes with Swagger documentation

feat(services): Create storageService and videoService for file management and video processing

fix(errorHandler): Enhance error handling with standardized responses and database operation wrappers
This commit is contained in:
2025-04-27 01:02:33 +02:00
parent 792bdca965
commit 4513af3aa0
30 changed files with 3006 additions and 763 deletions

169
src/routes/videoRoutes.js Normal file
View File

@@ -0,0 +1,169 @@
// src/routes/videoRoutes.js
const express = require('express');
const router = express.Router();
const VideoController = require('../controllers/videoController');
/**
* @swagger
* /videos:
* get:
* summary: Récupère toutes les vidéos
* responses:
* 200:
* description: Liste de toutes les vidéos
* 500:
* description: Erreur serveur
*/
router.get('/videos', VideoController.getAllVideos);
/**
* @swagger
* /videos/{id}:
* get:
* summary: Récupère une vidéo par ID
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: integer
* description: ID de la vidéo
* responses:
* 200:
* description: Détails de la vidéo
* 400:
* description: ID de vidéo invalide
* 404:
* description: Vidéo non trouvée
* 500:
* description: Erreur serveur
*/
router.get('/videos/:id', VideoController.getVideoById);
/**
* @swagger
* /videos:
* post:
* summary: Crée une nouvelle vidéo
* requestBody:
* required: true
* content:
* application/json:
* schema:
* type: object
* properties:
* project_id:
* type: integer
* measurement_ids:
* type: string
* description: JSON array of measurement IDs
* name:
* type: string
* resolution:
* type: string
* example: "1920x1080"
* duration:
* type: integer
* description: Duration in seconds
* required:
* - project_id
* - measurement_ids
* - name
* - resolution
* - duration
* responses:
* 200:
* description: Vidéo créée avec succès
* 400:
* description: Paramètres invalides
* 500:
* description: Erreur serveur
*/
router.post('/videos', VideoController.createVideo);
/**
* @swagger
* /videos/{id}:
* delete:
* summary: Supprime une vidéo
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: integer
* 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: Vidéo non trouvée
* 500:
* description: Erreur serveur
*/
router.delete('/videos/:id', VideoController.deleteVideo);
/**
* @swagger
* /videos/file/{video_id}:
* get:
* summary: Récupère le fichier vidéo
* parameters:
* - in: path
* name: video_id
* required: true
* schema:
* type: integer
* description: ID de la vidéo
* responses:
* 200:
* description: Fichier vidéo (stream)
* 206:
* description: Fichier vidéo partiel (range request)
* 400:
* description: Vidéo pas encore produite
* 404:
* description: Vidéo non trouvée
* 500:
* description: Erreur serveur
*/
router.get('/videos/file/:video_id', VideoController.getVideoFile);
/**
* @swagger
* /videos/progress/{video_id}:
* get:
* summary: Récupère la progression du rendu d'une vidéo
* parameters:
* - in: path
* name: video_id
* required: true
* schema:
* type: integer
* description: ID de la vidéo
* responses:
* 200:
* description: Informations de progression
* content:
* application/json:
* schema:
* type: object
* properties:
* progress:
* type: number
* elapsed:
* type: number
* eta:
* type: number
* status:
* type: string
* 404:
* description: Vidéo non trouvée
* 500:
* description: Erreur serveur
*/
router.get('/videos/progress/:video_id', VideoController.getVideoProgress);
module.exports = router;