//http://usday1vms006:4000/api/v1/zebra/wrapper1 import {z, createRoute, OpenAPIHono} from "@hono/zod-openapi"; import {readTags} from "../controller/readTags.js"; import {createLog} from "../../logger/logger.js"; import {responses} from "../../../globalUtils/routeDefs/responses.js"; import {newHeartBeat} from "../controller/readerControl.js"; const app = new OpenAPIHono(); let lastGpiTimestamp = 0; const ParamsSchema = z.object({ reader: z .string() .min(3) .openapi({ param: { name: "reader", in: "path", }, example: "1212121", }), }); app.openapi( createRoute({ tags: ["rfid"], summary: "Post info from the reader", method: "post", path: "/mgtevents/{reader}", request: { params: ParamsSchema, }, responses: responses(), }), async (c) => { const {reader} = c.req.valid("param"); const body = await c.req.json(); if (body.type === "heartbeat") { const heart = await newHeartBeat(reader); return c.json({success: heart.success, message: heart.message}, 200); } if (body.type === "gpi" && body.data.state === "HIGH") { const eventTimestamp = new Date(body.timestamp).getTime(); // Convert ISO timestamp to milliseconds if (eventTimestamp - lastGpiTimestamp > 5 * 1000) { // Check if it's been more than 2ms lastGpiTimestamp = eventTimestamp; // Update last seen timestamp createLog("info", "rfid", "rfid", `${reader} is reading a tag.`); await readTags(reader); } else { createLog("info", "rfid", "rfid", `A new trigger from ${reader} was to soon`); lastGpiTimestamp = eventTimestamp; } //console.log(body); } return c.json({success: true, message: `New info from ${reader}`}, 200); } ); export default app;