diff --git a/api.js b/api.js index 84514b1..88a7ece 100644 --- a/api.js +++ b/api.js @@ -8,6 +8,7 @@ const imageRoutes = require('./routes/imageRoutes'); const uploadRoutes = require('./routes/uploadRoutes'); const FileWatcher = require('./src/data/filewatcher'); const database_manager = require('./src/database/database_manager'); +const capture_system = require('./routes/capture_system'); router.use(cors({ origin: ['http://127.0.0.1:5500', 'http://localhost:5500', 'http://localhost:3000'], diff --git a/routes/capture_system.js b/routes/capture_system.js index bbd115b..e219b23 100644 --- a/routes/capture_system.js +++ b/routes/capture_system.js @@ -15,4 +15,142 @@ const defaultSettings = { maintenance: false, stop_flag: false, idle: true -}; \ No newline at end of file +}; + +async function camera_initialization() { + // si capture.get_camera est vide ou undefined, on l'initialise + let current_camera = await database_manager.capture.get_camera(); + if (!current_camera || current_camera === undefined) { + console.log("Initializing camera..."); + current_camera = await database_manager.capture.init_camera( + defaultSettings.id, + defaultSettings.interval, + defaultSettings.nb_images, + defaultSettings.maintenance, + defaultSettings.stop_flag, + defaultSettings.idle + ); + console.log("Camera initialized:", current_camera); + } + else { + console.log("Camera already initialized:", current_camera); + } +} + +camera_initialization() + +async function get_camera_settings() { + const settings = await database_manager.capture.get_camera(); + if (!settings) { + // balancer une erreur si la caméra n'est pas initialisée + throw new Error("Camera settings not found in the database."); + } + return settings; +} + +router.get('/camera/status', async (req, res) => { + try { + const settings = await get_camera_settings(); + res.json(settings); + } catch (error) { + serverError.sendError('Error getting camera status:', res, error, 500); + } +}); + +async function stop_procedure() { // côté serveur + let new_settings = { + stop_flag: true, + } + await database_manager.capture.edit_camera(new_settings); + console.log("Stopping camera... en attente de confirmation de la caméra..."); +} + +async function confirm_stop_procedure() { // côté caméra + let new_settings = { + interval: null, + nb_images: null, + stop_flag: false, + idle: true, + } + await database_manager.capture.edit_camera(new_settings); + console.log("Camera stopped."); +} + +async function start_procedure(interval, nb_images) { + let new_settings = { + interval: interval, + nb_images: nb_images, + stop_flag: false, + idle: false, + } + console.log("Starting Procedure with settings:", new_settings); + await database_manager.capture.edit_camera(new_settings); + console.log("Camera started."); +} + +async function activate_maintenance() { + let new_settings = { + maintenance: true, + } + await database_manager.capture.edit_camera(new_settings); + console.log("Camera in maintenance mode."); +} + +async function deactivate_maintenance() { + let new_settings = { + maintenance: false, + } + await database_manager.capture.edit_camera(new_settings); + console.log("Camera out of maintenance mode."); +} + +router.post('/procedure/start', async (req, res) => { + const { interval, nb_images } = req.body; + if (!interval || !nb_images) { + return res.status(400).json({ error: 'Interval and number of images are required' }); + } + try { + await start_procedure(interval, nb_images); + res.json({ message: 'Camera started successfully', settings: { interval, nb_images } }); + } catch (error) { + serverError.sendError('Error starting camera procedure:', res, error, 500); + } +}); + +router.post('/procedure/stop', async (req, res) => { + try { + await stop_procedure(); + res.json({ message: 'Camera stop procedure initiated successfully' }); + } catch (error) { + serverError.sendError('Error stopping camera procedure:', res, error, 500); + } +}); + +router.post('/camera/stop', async (req, res) => { + try { + await confirm_stop_procedure(); + res.json({ message: 'Camera stopped successfully' }); + } catch (error) { + serverError.sendError('Error stopping camera:', res, error, 500); + } +}); + + +router.post('/camera/maintenance', async (req, res) => { + try { + await activate_maintenance(); + res.json({ message: 'Camera in maintenance mode' }); + } catch (error) { + serverError.sendError('Error activating maintenance mode:', res, error, 500); + } +} +); + +router.post('/camera/maintenance/deactivate', async (req, res) => { + try { + await deactivate_maintenance(); + res.json({ message: 'Camera out of maintenance mode' }); + } catch (error) { + serverError.sendError('Error deactivating maintenance mode:', res, error, 500); + } +}); \ No newline at end of file diff --git a/routes/uploadRoutes.js b/routes/uploadRoutes.js index f503566..09af57a 100644 --- a/routes/uploadRoutes.js +++ b/routes/uploadRoutes.js @@ -7,7 +7,7 @@ const serverError = require('../utils/serverError'); const upload = multer({ storage: multer.memoryStorage() }); -router.post('/uploadmeasurement', upload.single('image'), async (req, res) => { +router.post('/camera/upload', upload.single('image'), async (req, res) => { //afficher le body de la requête console.log(req.body); const { projectId, timestamp, temperature, humidity } = req.body; diff --git a/src/database/database_manager.js b/src/database/database_manager.js index 9fd98c5..675fc31 100644 --- a/src/database/database_manager.js +++ b/src/database/database_manager.js @@ -275,15 +275,16 @@ const capture = { await db.query(query, [id]); }), - init_camera: handleDatabaseOperation(async (id, interval, nb_images, maintenance, stop_flag) => { - const query = `INSERT INTO camera (id, interval, nb_images, maintenance, stop_flag) VALUES ($1, $2, $3, $4, $5) RETURNING *;`; - const values = [id, interval, nb_images, maintenance, stop_flag]; + init_camera: handleDatabaseOperation(async (id, interval, nb_images, maintenance, stop_flag, idle) => { + const query = `INSERT INTO camera (id, interval, nb_images, maintenance, stop_flag, idle) VALUES ($1, $2, $3, $4, $5, $6) RETURNING *;`; + const values = [id, interval, nb_images, maintenance, stop_flag, idle]; return (await db.query(query, values)).rows[0]; }), }; // zone de test async function test_zone(){ + // } test_zone(); diff --git a/stuff.md b/stuff.md index e7e531f..f3c3dd9 100644 --- a/stuff.md +++ b/stuff.md @@ -13,7 +13,6 @@ si upload : Côté Backend /procedure/start // démarrer une procédure (POST) -/procedure/status // récupérer le statut de la caméra/procédure courante (GET) /procedure/stop // arrêter la procédure courante (POST) (doit attendre la confirmation de /camera/stop) /procedure/delete // supprimer la procédure courante (POST) (doit attendre la confirmation de /camera/delete)