// 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;