feat: implement sensor connection and health check endpoints

This commit is contained in:
Giuseppe Raffa
2026-04-14 17:05:24 +02:00
parent c478f5c13c
commit d79c12b6e9
4 changed files with 129 additions and 1 deletions

View File

@@ -0,0 +1,35 @@
const router = require('express').Router();
const db = require('../store/db');
const crypto = require('crypto');
router.post('/connect/new', async (req, res) => {
const { name, code } = req.body;
if (!name || !code) {
return res.status(400).json({ error: 'name and code are required' });
}
if (code.length < 6) {
return res.status(400).json({ error: 'code must be at least 6 characters' });
}
const salt = crypto.randomBytes(16).toString('hex');
const hash = crypto.scryptSync(code, salt, 64).toString('hex');
const codeHash = `${salt}:${hash}`;
try {
await db.query('sensors',
'INSERT INTO sensors (name, code_hash) VALUES ($1, $2)',
[name, codeHash]
);
res.status(201).json({ status: 'ok' });
} catch (err) {
if (err.code === '23505') {
return res.status(409).json({ error: 'name already exists' });
}
console.error('Error creating sensor', err);
res.status(500).json({ error: 'internal server error' });
}
});
module.exports = router;

View File

@@ -0,0 +1,14 @@
const router = require('express').Router();
const db = require('../store/db');
router.get('/sensors', async (req, res) => {
try {
const result = await db.query('SELECT id, name FROM sensors', [], 'sensors');
res.json(result.rows);
} catch (err) {
console.error('Error fetching sensors', err);
res.status(500).json({ error: 'internal server error' });
}
});
module.exports = router;