const { isObject } = require("lodash"); const jobUpdated = async (req, res) => { const { ioRedis, logger, ioHelpers } = req; // Old Way if (req?.body?.event?.data?.new || isObject(req?.body?.event?.data?.new)) { const updatedJob = req.body.event.data.new; const bodyshopID = updatedJob.shopid; ioRedis.to(ioHelpers.getBodyshopRoom(bodyshopID)).emit("production-job-updated", updatedJob); return res.json({ message: "Job updated and event emitted" }); } // New way if (!req?.body?.data || !isObject(req.body.data)) { logger.log("job-update-error", "ERROR", req.user?.email, null, { message: `Malformed Job Update request sent from Hasura`, body: req?.body }); return res.json({ status: "error", message: `Malformed Job Update request sent from Hasura` }); } // Uncomment for further testing // You can also test this using SocketIOAdmin // logger.log("job-update", "DEBUG", req.user?.email, null, { // message: `Job updated event received from Hasura`, // jobid: req?.body?.event?.data?.new?.id // }); const updatedJob = req.body.data; const bodyshopID = updatedJob.shopid; // Emit the job-updated event only to the room corresponding to the bodyshop ioRedis.to(ioHelpers.getBodyshopRoom(bodyshopID)).emit("production-job-updated", updatedJob); return res.json({ message: "Job updated and event emitted" }); }; module.exports = jobUpdated;