feat: add CORS support and enhance session routes for better sensor management

This commit is contained in:
Giuseppe Raffa
2026-04-14 19:39:26 +02:00
parent 137c6131c3
commit bf66845528
4 changed files with 121 additions and 12 deletions

View File

@@ -1,7 +1,10 @@
const router = require('express').Router();
const db = require('../store/db');
const { queryAll, query } = require('../store/redis');
/**
* GET /sessions — Lista tutte le sessioni attive dei sensori.
* Legge da Redis le chiavi sensors:* (scritte da handler.js alla connessione)
*/
router.get('/', async (req, res) => {
try {
const keys = await queryAll('sensors');
@@ -23,38 +26,57 @@ router.get('/', async (req, res) => {
}
});
router.get('/pending', (req, res) => {
/**
* GET /sessions/pending — Lista token di connessione pendenti.
* Legge da Redis le chiavi sensors_pending:* (create da createConnectionToken)
*/
router.get('/pending', async (req, res) => {
try {
const pendingTokens = queryAll('snsr_pending_token');
res.json(pendingTokens);
const keys = await queryAll('sensors_pending');
res.json(keys);
} catch (err) {
console.error('Error fetching pending tokens', err);
res.status(500).json({ error: `Error fetching pending tokens, ${err}` });
}
});
router.get('/connected', (req, res) => {
/**
* GET /sessions/connected — Lista sensori attualmente connessi.
* Legge da Redis le chiavi sensor:* (scritte da appendAsConnection in handler.js)
*/
router.get('/connected', async (req, res) => {
try {
const connectedSensors = queryAll('snsr_connected');
res.json(connectedSensors);
const keys = await queryAll('sensor');
const connected = [];
for (const key of keys) {
const name = key.replace('sensor:', '');
const info = await query(name, 'sensor');
if (info.status === 'connected') {
connected.push({ name, connectedAt: info.timestamp });
}
}
res.json(connected);
} catch (err) {
console.error('Error fetching connected sensors', err);
res.status(500).json({ error: `Error fetching connected sensors, ${err}` });
}
});
/**
* GET /sessions/connected/:id — Verifica se un sensore specifico è connesso.
*/
router.get('/connected/:id', async (req, res) => {
const { id } = req.params;
try {
const sensor = await query(`snsr_connected:${id}`);
if (!sensor) {
const info = await query(id, 'sensor');
if (!info || info.status !== 'connected') {
return res.status(404).json({ error: 'sensor not connected' });
}
res.json({ id, name: sensor });
res.json({ name: id, connectedAt: info.timestamp });
} catch (err) {
console.error('Error fetching sensor connection status', err);
res.status(500).json({ error: `Error fetching sensor connection status, ${err}` });
}
});
module.exports = router;
module.exports = router;