Procházet zdrojové kódy

Block unchanged data

Kuan Ting Lin před 5 roky
rodič
revize
d4ff3a63cd

+ 6 - 8
src/controllers/EquipmentController.ts

@@ -6,6 +6,7 @@ import { networkError } from "./Error";
 import { Site } from "../database/models/Site";
 import { EquipmentData } from "../database/models/EquipmentData";
 import { sendUpdateRequest, sendAlarm } from "../firebase";
+import { Status } from "../enums/EquipmentStatus";
 
 class EquipmentController {
   async getEquipments(req: Request, res: Response) {
@@ -56,16 +57,13 @@ class EquipmentController {
   }
 
   async receiveEquipmentData(req: Request, res: Response) {
-    const Status: { [index: string]: Number } = {
-      Offline: 0,
-      Normal: 1,
-      Rest: 2,
-      Alarm: 3,
-      SOS: 4,
-    };
-    var statusId = Status[req.body.Status] ? Status[req.body.Status] : 1;
+    var statusId = Object.keys(Status).includes(req.body.Status)
+      ? Status[req.body.Status]
+      : 1;
     const equipment = await Equipment.findByPk(Number(req.body.AidID));
 
+    console.log("statusId", statusId);
+
     if (!equipment) {
       res.status(400).json({ message: "Equipment not found." });
       return;

+ 7 - 0
src/enums/EquipmentStatus.ts

@@ -0,0 +1,7 @@
+export const Status: { [index: string]: Number } = {
+  Offline: 0,
+  Normal: 1,
+  Rest: 2,
+  Alarm: 3,
+  SOS: 4,
+};

+ 26 - 6
src/middleware/BlockDuplicatedEquipmentData.ts

@@ -1,24 +1,44 @@
 import { Request, Response, NextFunction } from "express";
 import { EquipmentData } from "../database/models/EquipmentData";
+import { Status } from "../enums/EquipmentStatus";
+
+function getEquipmentDataFromRequest(req: Request) {
+  return {
+    battery: Number(req.body.Battery),
+    hook_battery_1: Number(req.body.BattHook1),
+    hook_battery_2: Number(req.body.BattHook2),
+    alarm: JSON.stringify(req.body.Alarm),
+    status: Status[req.body.Status],
+    latitude: Number(req.body.GPS_Lat).toFixed(5),
+    longitude: Number(req.body.GPS_Lon).toFixed(5),
+  };
+}
 
 async function BlockDuplicatedEquipmentData(
   req: Request,
   res: Response,
   next: NextFunction
 ) {
-  const lastReceivedData = await EquipmentData.findOne({
+  const lastReceivedData: {
+    [index: string]: any;
+  } | null = await EquipmentData.findOne({
     where: { aid_id: req.body.AidID },
     order: [["id", "DESC"]],
   });
+  const incomingData: { [index: string]: any } = getEquipmentDataFromRequest(
+    req
+  );
 
-  if (
-    !lastReceivedData ||
-    lastReceivedData.battery != Number(req.body.Battery) ||
-    lastReceivedData.alarm != JSON.stringify(req.body.Alarm)
-  ) {
+  if (!lastReceivedData) {
     return next();
   }
 
+  for (const key in incomingData) {
+    if (lastReceivedData[key] != incomingData[key]) {
+      return next();
+    }
+  }
+
   return res.json({ message: "data unchanged." });
 }