Files
timelapse-backend/routes/cameraRoutes.js

117 lines
4.0 KiB
JavaScript

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;