diff --git a/controllers/modbus.controller.js b/controllers/modbus.controller.js index 2596b94..712741b 100644 --- a/controllers/modbus.controller.js +++ b/controllers/modbus.controller.js @@ -1,6 +1,7 @@ import db from "#root/config/database.config.js"; import modbusClient from "#root/config/modbus-client.config.js"; import * as utils from '#root/utils/index.js' +import { RowNotFoundError } from '#root/errors/index.js' import { appService, modbusService } from "#root/services/index.js"; export const modbusController = { @@ -136,7 +137,7 @@ export const modbusController = { async removeDevice(req, res, next) { try { const device = await db.get(`SELECT id FROM "modbus_slaves" WHERE id = ?`, [req.body.id]); - if (!device) return res.status(404).json({ message: "Device not found." }); + if (!device) throw new RowNotFoundError(); await db.run(`DELETE FROM "modbus_slaves" WHERE id = ?`, [req.body.id]); return res.status(200).json({ message: "Device removed." }); } catch (error) { @@ -158,7 +159,12 @@ export const modbusController = { VALUES (?, ?, ?, ?, ?) `, [name, slave_id, reg_addr, reg_format, reg_type] ); - return res.status(200).json({ message: 'Created.' }); + const createdDisplayValue = await db.get(`SELECT * FROM "display_values" WHERE id = last_insert_rowid()`); + + return res.status(200).json({ + message: 'Created.', + data: createdDisplayValue, + }); } catch (error) { next(error); } @@ -179,6 +185,30 @@ export const modbusController = { } }, + /** + * Update display value + * @param {import('express').Request} req + * @param {import('express').Response} res + * @param {import('express').NextFunction} next + */ + async updateDisplayValue(req, res, next) { + try { + const { id, name, slave_id, reg_addr, reg_type, reg_format } = req.body; + const row = await db.get(`SELECT id from "display_values" WHERE id = ?`, [id]); + if (!row) throw new RowNotFoundError(); + await db.run(`UPDATE "display_values" SET + name = ?, + slave_id = ?, + reg_addr = ?, + reg_type = ?, + reg_format = ? + WHERE id = ?`, [name, slave_id, reg_addr, reg_type, reg_format, id]); + return res.status(200).json({ message: 'Updated.' }); + } catch (error) { + next(error); + } + }, + /** * Creates event stream aboud modbus connection status * @param {import('express').Request} req @@ -209,7 +239,7 @@ export const modbusController = { if (!slave_id) return res.status(400).json({ error: { message: "'slave_id' parameter is required." } }); const device = await db.get(`SELECT * FROM "modbus_slaves" WHERE id = ?`, [slave_id]); - if (!device) return res.status(404).json({ error: { message: "Device not found." } }); + if (!device) throw new RowNotFoundError(); utils.setSSEHeaders(res); diff --git a/data.db b/data.db index 3986657..c0f7498 100644 Binary files a/data.db and b/data.db differ diff --git a/errors/index.js b/errors/index.js new file mode 100644 index 0000000..c4796ed --- /dev/null +++ b/errors/index.js @@ -0,0 +1,14 @@ +export class DomainError extends Error { + constructor(message) { + super(message); + this.name = this.constructor.name; + Error.captureStackTrace(this, this.constructor); + } +} + +export class RowNotFoundError extends DomainError { + constructor() { + super('Row not found.'); + this.statusCode = 404; + } +} \ No newline at end of file diff --git a/middlewares/error-handler.middleware.js b/middlewares/error-handler.middleware.js index 1a0e293..8d95ee7 100644 --- a/middlewares/error-handler.middleware.js +++ b/middlewares/error-handler.middleware.js @@ -9,7 +9,7 @@ export function errorHandlerMiddleware() { req.log.error(error, "Something went wrong"); const status = error.statusCode || 500; const message = error.message || "Internal Server Error"; - res.status(500).json({ + res.status(status).json({ error: { status, message, diff --git a/public/css/dist.css b/public/css/dist.css index 62fb05d..7f16fe2 100644 --- a/public/css/dist.css +++ b/public/css/dist.css @@ -928,6 +928,11 @@ video { background-color: rgb(239 68 68 / var(--tw-bg-opacity)); } +.bg-white { + --tw-bg-opacity: 1; + background-color: rgb(255 255 255 / var(--tw-bg-opacity)); +} + .fill-blue-600 { fill: #2563eb; } @@ -987,8 +992,8 @@ video { padding-left: 0px; } -.pl-2 { - padding-left: 0.5rem; +.pl-\[260px\] { + padding-left: 260px; } .pr-6 { @@ -999,14 +1004,6 @@ video { padding-top: 1.25rem; } -.pl-\[250px\] { - padding-left: 250px; -} - -.pl-\[260px\] { - padding-left: 260px; -} - .text-left { text-align: left; } diff --git a/public/index.html b/public/index.html index b45d452..357d296 100644 --- a/public/index.html +++ b/public/index.html @@ -21,7 +21,7 @@