diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..d7a5fbc --- /dev/null +++ b/Dockerfile @@ -0,0 +1,23 @@ +# Utiliser une image de base officielle de Node.js +FROM node:latest + +# Installer ffmpeg +RUN apt-get update && apt-get install -y ffmpeg + +# Définir le répertoire de travail dans le conteneur +WORKDIR /backend + +# Copier le fichier package.json et package-lock.json (si disponible) +COPY package*.json ./ + +# Installer les dépendances Node.js +RUN npm install + +# Copier le reste de l'application +COPY . . + +# Exposer le port sur lequel l'application va tourner +EXPOSE 3000 + +# Commande pour démarrer l'application +CMD ["npm", "run", "dev"] diff --git a/docker-compose.yml b/docker-compose.yml index 25eacee..a9869d1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,8 @@ services: timelapse-api: - image: node:latest + build: + context: . # Chemin vers le répertoire contenant le Dockerfile + dockerfile: Dockerfile # Nom du Dockerfile, par défaut c'est "Dockerfile" container_name: timelapse-api ports: - "8053:3000" @@ -11,7 +13,6 @@ services: - NODE_VERSION=22.9.0 - YARN_VERSION=1.22.22 working_dir: /backend - command: /bin/bash -c "npm install && npm run dev" restart: always networks: - bridge diff --git a/routes/cameraRoutes.js b/routes/cameraRoutes.js index 7f583b4..a7b1b34 100644 --- a/routes/cameraRoutes.js +++ b/routes/cameraRoutes.js @@ -1,7 +1,6 @@ -const express = require('express'); +import express from 'express'; +import serverError from '../utils/serverError.js'; const router = express.Router(); -const db = require('../db'); -const serverError = require('../utils/serverError'); // Status du Projet : // 0 = En attente de capture @@ -14,45 +13,6 @@ const maxInterval = 60; // Minutes var captureProjectID = -1; var captureInterval = 0; // Minutes -function startProcedure(projectId, interval) { - console.log('Démarrage de la procédure de capture'); - captureProjectID = projectId; - if (interval < minInterval) { - throw new Error('L\'intervalle de capture doit être supérieur ou égal à ' + minInterval + ' minutes.'); - } - if (interval > maxInterval) { - throw new Error('L\'intervalle de capture doit être inférieur ou égal à ' + maxInterval + ' minutes.'); - } - captureInterval = interval; - console.log('Procédure de capture démarrée avec succès, projet ID: ' + projectId + ', interval: ' + interval + ' minutes.'); - return { message: 'Procédure de capture démarrée avec succès, projet ID: ' + projectId + ', interval: ' + interval + ' minutes.' }; -} - -function stopProcedure() { - console.log('Arrêt de la procédure de capture'); - return { message: 'Procédure de capture arrêtée avec succès.' }; -} - -router.post('/procedure/start/', async (req, res) => { - const { projectId, interval } = req.body; - try { - const result = startProcedure(projectId, interval); - res.status(200).json(result); - } catch (err) { - serverError(res, err); - } -} -); - -router.get('/procedure/stop/', async (req, res) => { - try { - const result = stopProcedure(); - res.status(200).json(result); - } catch (err) { - serverError(res, err); - } -}); - /** * @swagger * /procedure/start/: @@ -82,10 +42,36 @@ router.get('/procedure/stop/', async (req, res) => { * properties: * message: * type: string - * example: Procédure de capture démarrée avec succès, projet ID: 1, interval: 10 minutes. + * example: "Procédure de capture démarrée avec succès, projet ID: 1, interval: 10 minutes." * 500: * description: Internal server error. - * + */ +router.post('/procedure/start/', async (req, res) => { + const { projectId, interval } = req.body; + try { + const result = startProcedure(projectId, interval); + res.status(200).json(result); + } catch (err) { + serverError(res, err); + } +}); + +function startProcedure(projectId, interval) { + console.log('Démarrage de la procédure de capture'); + captureProjectID = projectId; + if (interval < minInterval) { + throw new Error('L\'intervalle de capture doit être supérieur ou égal à ' + minInterval + ' minutes.'); + } + if (interval > maxInterval) { + throw new Error('L\'intervalle de capture doit être inférieur ou égal à ' + maxInterval + ' minutes.'); + } + captureInterval = interval; + console.log('Procédure de capture démarrée avec succès, projet ID: ' + projectId + ', interval: ' + interval + ' minutes.'); + return { message: 'Procédure de capture démarrée avec succès, projet ID: ' + projectId + ', interval: ' + interval + ' minutes.' }; +} + +/** + * @swagger * /procedure/stop/: * get: * summary: Stop the capture procedure @@ -100,9 +86,22 @@ router.get('/procedure/stop/', async (req, res) => { * properties: * message: * type: string - * example: Procédure de capture arrêtée avec succès. + * example: "Procédure de capture arrêtée avec succès." * 500: * description: Internal server error. */ +router.get('/procedure/stop/', async (req, res) => { + try { + const result = stopProcedure(); + res.status(200).json(result); + } catch (err) { + serverError(res, err); + } +}); + +function stopProcedure() { + console.log('Arrêt de la procédure de capture'); + return { message: 'Procédure de capture arrêtée avec succès.' }; +} module.exports = router;