Files
timelapse-backend/src/routes/videoRoutes.js
Kerboul 3d65ccb7fc
All checks were successful
SSH Backend Deploy / ssh-deploy (push) Successful in 11s
fix(routes): Mettre à jour les descriptions des statuts des projets et des vidéos pour plus de clarté
2025-04-27 14:51:40 +02:00

233 lines
6.8 KiB
JavaScript

// src/routes/videoRoutes.js
const express = require('express');
const router = express.Router();
const VideoController = require('../controllers/videoController');
/**
* @swagger
* /videos:
* get:
* tags:
* - Vidéos
* summary: Récupère toutes les vidéos
* description: Retourne la liste complète des vidéos de tous les projets
* responses:
* 200:
* description: Liste de toutes les vidéos
* content:
* application/json:
* schema:
* type: array
* items:
* $ref: '#/components/schemas/Video'
* 500:
* $ref: '#/components/responses/ServerError'
*/
router.get('/videos', VideoController.getAllVideos);
/**
* @swagger
* /videos/{id}:
* get:
* tags:
* - Vidéos
* summary: Récupère une vidéo par ID
* description: Retourne les détails d'une vidéo spécifique
* 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
* content:
* application/json:
* schema:
* $ref: '#/components/schemas/Video'
* 400:
* $ref: '#/components/responses/BadRequest'
* 404:
* $ref: '#/components/responses/NotFound'
* 500:
* $ref: '#/components/responses/ServerError'
*/
router.get('/videos/:id', VideoController.getVideoById);
/**
* @swagger
* /videos:
* post:
* tags:
* - Vidéos
* summary: Crée une nouvelle vidéo
* description: Crée une nouvelle vidéo à partir d'une liste de mesures et démarre le processus de rendu
* requestBody:
* required: true
* content:
* application/json:
* schema:
* type: object
* properties:
* project_id:
* type: integer
* description: ID du projet
* measurement_ids:
* type: string
* description: Tableau JSON d'IDs de mesures
* example: "[1,2,3,4,5]"
* name:
* type: string
* description: Nom de la vidéo
* resolution:
* type: string
* description: Résolution de la vidéo (format LARGEURxHAUTEUR)
* example: "1920x1080"
* duration:
* type: integer
* description: Durée souhaitée en secondes
* required:
* - project_id
* - measurement_ids
* - name
* - resolution
* - duration
* responses:
* 200:
* description: Vidéo créée avec succès et rendu démarré
* content:
* application/json:
* schema:
* type: object
* properties:
* message:
* type: string
* example: Vidéo créée avec succès et le rendu a démarré
* id:
* type: integer
* example: 42
* 400:
* $ref: '#/components/responses/BadRequest'
* 500:
* $ref: '#/components/responses/ServerError'
*/
router.post('/videos', VideoController.createVideo);
/**
* @swagger
* /videos/{id}:
* delete:
* tags:
* - Vidéos
* summary: Supprime une vidéo
* description: Supprime une vidéo et le fichier vidéo associé
* parameters:
* - in: path
* name: id
* required: true
* schema:
* type: integer
* description: ID de la vidéo à supprimer
* responses:
* 200:
* description: Vidéo supprimée avec succès
* content:
* application/json:
* schema:
* type: object
* properties:
* message:
* type: string
* example: Vidéo supprimée avec succès
* 400:
* $ref: '#/components/responses/BadRequest'
* 404:
* $ref: '#/components/responses/NotFound'
* 500:
* $ref: '#/components/responses/ServerError'
*/
router.delete('/videos/:id', VideoController.deleteVideo);
/**
* @swagger
* /videos/file/{video_id}:
* get:
* tags:
* - Vidéos
* summary: Récupère le fichier vidéo
* description: Télécharge ou diffuse le fichier vidéo avec support du streaming HTTP
* parameters:
* - in: path
* name: video_id
* required: true
* schema:
* type: integer
* description: ID de la vidéo
* responses:
* 200:
* description: Fichier vidéo (stream)
* content:
* video/mp4:
* schema:
* type: string
* format: binary
* 206:
* description: Fichier vidéo partiel (range request)
* 400:
* $ref: '#/components/responses/BadRequest'
* 404:
* $ref: '#/components/responses/NotFound'
* 500:
* $ref: '#/components/responses/ServerError'
*/
router.get('/videos/file/:video_id', VideoController.getVideoFile);
/**
* @swagger
* /videos/progress/{video_id}:
* get:
* tags:
* - Vidéos
* summary: Récupère la progression du rendu d'une vidéo
* description: Donne des informations sur l'état actuel 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
* description: Pourcentage de progression (0-100)
* example: 45.2
* elapsed:
* type: number
* description: Temps écoulé depuis le début du rendu (secondes)
* example: 120
* eta:
* type: number
* description: Temps estimé restant (secondes)
* example: 150
* status:
* type: integer
* description: "Statut de la vidéo: 0=rendering, 1=completed, 2=error"
* example: 1
* 404:
* $ref: '#/components/responses/NotFound'
* 500:
* $ref: '#/components/responses/ServerError'
*/
router.get('/videos/progress/:video_id', VideoController.getVideoProgress);
module.exports = router;