All checks were successful
SSH Backend Deploy / ssh-deploy (push) Successful in 11s
233 lines
6.8 KiB
JavaScript
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; |