2025-07-10 21:08:42 +01:00
|
|
|
const express = require("express");
|
|
|
|
|
const router = express.Router();
|
|
|
|
|
const { ShippingDock } = require("../models");
|
|
|
|
|
|
|
|
|
|
const {
|
|
|
|
|
handleError,
|
|
|
|
|
handleSuccess,
|
|
|
|
|
handleSequelizeError,
|
|
|
|
|
deepEqual,
|
|
|
|
|
} = require("../utils");
|
|
|
|
|
|
|
|
|
|
// GET all shipping docks
|
|
|
|
|
router.get("/", async (_, res) => {
|
|
|
|
|
try {
|
|
|
|
|
const docks = await ShippingDock.findAll();
|
|
|
|
|
handleSuccess(res, docks);
|
|
|
|
|
} catch (err) {
|
|
|
|
|
handleSequelizeError(err, res);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// GET one shipping dock by id
|
|
|
|
|
router.get("/:id", async (req, res) => {
|
|
|
|
|
try {
|
|
|
|
|
const dock = await ShippingDock.findByPk(req.params.id);
|
|
|
|
|
if (!dock) return handleError("Dock not found", 404, res);
|
|
|
|
|
handleSuccess(res, dock);
|
|
|
|
|
} catch (err) {
|
|
|
|
|
handleSequelizeError(err, res);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// POST create a shipping dock
|
|
|
|
|
router.post("/", async (req, res) => {
|
|
|
|
|
try {
|
|
|
|
|
const { name } = req.body;
|
|
|
|
|
if (!name || !name.trim()) {
|
|
|
|
|
return handleError("Name is required and cannot be empty", 400, res);
|
|
|
|
|
}
|
|
|
|
|
await ShippingDock.create(req.body);
|
2025-07-11 18:05:50 +01:00
|
|
|
handleSuccess(res, null, 201);
|
2025-07-10 21:08:42 +01:00
|
|
|
} catch (err) {
|
|
|
|
|
handleError(err.message, 500, res);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// PUT update a shipping dock
|
|
|
|
|
router.put("/:id", async (req, res) => {
|
|
|
|
|
try {
|
|
|
|
|
const { id } = req.params;
|
|
|
|
|
const dock = await ShippingDock.findByPk(id);
|
|
|
|
|
if (!dock) return handleError("Dock not found", 404, res);
|
|
|
|
|
|
|
|
|
|
// Validate status separately
|
|
|
|
|
if (
|
|
|
|
|
req.body.status !== undefined &&
|
|
|
|
|
![0, 1].includes(Number(req.body.status))
|
|
|
|
|
) {
|
|
|
|
|
return handleError("Status must be 0 or 1", 400, res);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Build changes object dynamically
|
|
|
|
|
const changes = {};
|
|
|
|
|
for (const key in req.body) {
|
|
|
|
|
if (req.body[key] !== undefined && !deepEqual(req.body[key], dock[key])) {
|
|
|
|
|
changes[key] = req.body[key];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (Object.keys(changes).length === 0) {
|
|
|
|
|
return handleError("No updated fields", 400, res); // No changes
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
await dock.update(changes);
|
|
|
|
|
handleSuccess(res, await ShippingDock.findByPk(id));
|
|
|
|
|
} catch (err) {
|
|
|
|
|
handleSequelizeError(err, res);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// DELETE a shipping dock
|
|
|
|
|
router.delete("/:id", async (req, res) => {
|
|
|
|
|
try {
|
|
|
|
|
const deleted = await ShippingDock.destroy({
|
|
|
|
|
where: { id: req.params.id },
|
|
|
|
|
});
|
|
|
|
|
if (deleted === 0) return handleError("Dock not found", 404, res);
|
2025-07-11 18:05:50 +01:00
|
|
|
handleSuccess(res, null);
|
2025-07-10 21:08:42 +01:00
|
|
|
} catch (err) {
|
|
|
|
|
handleSequelizeError(err, res);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
module.exports = router;
|