const express = require('express'); const router = express.Router(); const path = require('path'); const fs = require('fs'); const dbTester = require('../test/tester'); const db = require('../db'); const serverError = require('../utils/serverError'); const minInterval = 3; // Minutes //const maxInterval = 60; // Minutes const cameraFile = path.join(__dirname, '../storage/camera.txt'); var captureProjectID = -1; var captureInterval = 0; // Minutes function writeCameraFile() { const data = { captureProjectID, captureInterval }; fs.writeFileSync (cameraFile, JSON.stringify(data, null, 2), 'utf8'); } function isCameraOccupied() { return captureProjectID != -1; } writeCameraFile(); 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.sendError('Erreur lors du démarrage de la procédure de capture:', res, err, 500); } }); function startProcedure(projectId, interval) { // Vérifier si la caméra est occupée // Vérifier cohérence des valeurs // Interroger DB sur l'existence du projet // Appliquer valeurs // Changer le statut du projet dans la DB if (isCameraOccupied()) { return { message: 'Caméra Occupée : Le projet ID ' + captureProjectID + ' est déjà en cours de capture.' }; } console.log('Démarrage de la procédure de capture'); exists = db.query('SELECT * FROM public.projects WHERE id = $1', [projectId]); if (!exists) { return { message: 'Le projet ID ' + projectId + ' n\'existe pas.' }; } if (interval < minInterval) { return { message: 'L\'intervalle de capture doit être supérieur ou égal à ' + minInterval + ' minutes.' }; } // if (interval > maxInterval) { // return { message: 'L\'intervalle de capture doit être inférieur ou égal à ' + maxInterval + ' minutes.' }; // } // Application des valeurs captureProjectID = projectId; captureInterval = interval; //via la DB changer le status du projet const query = 'UPDATE public.projects SET status = $2 WHERE id = $1 RETURNING *'; const values = [projectId, 1]; db.query(query, values, (err, res) => { if (err) { console.error('Erreur lors de la mise à jour du statut (activation) du projet:', err); return { message: 'Erreur lors de la mise à jour du statut (activation) du projet.' }; } }); 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() { oldProjectID = captureProjectID; oldInterval = captureInterval; console.log('Ancien Projet : ' + oldProjectID + ', Ancien Intervalle : ' + oldInterval); // Application du reset captureProjectID = -1; captureInterval = 0; console.log('Nouveau Projet : ' + captureProjectID + ', Nouvel Intervalle : ' + captureInterval); console.log('Arrêt de la procédure de capture'); //via la DB changer le status du projet const query = 'UPDATE public.projects SET status = $2 WHERE id = $1 RETURNING *'; const values = [oldProjectID, 0]; db.query(query, values, (err, res) => { if (err) { console.error('Erreur lors de la mise à jour du statut (désactivation) du projet:', err); return { message: 'Erreur lors de la mise à jour du statut (désactivation) du projet.' }; } }); return { message: 'Procédure de capture arrêtée avec succès, projet ID: ' + oldProjectID + ', interval: ' + oldInterval + ' minutes.' }; } router.post('/procedure/stop/', async (req, res) => { try { const result = stopProcedure(); res.status(200).json(result); } catch (err) { serverError.sendError('Erreur lors de l\'arrêt de la procédure de capture:', res, err, 500); } }); module.exports = router;