Browse Source

[FEATURE] Batt_Hook

Kuan Ting Lin 5 years ago
parent
commit
59125aa986

+ 26 - 0
migrations/20200503233725-add_hook_battery_to_equipment_data_table.js

@@ -0,0 +1,26 @@
+"use strict";
+
+module.exports = {
+  up: async (queryInterface, Sequelize) => {
+    await queryInterface.addColumn("equipment_data", "hook_battery_1", {
+      type: Sequelize.TINYINT,
+      defaultValue: 0,
+      allowNull: false
+    });
+
+    return await queryInterface.addColumn("equipment_data", "hook_battery_2", {
+      type: Sequelize.TINYINT,
+      defaultValue: 0,
+      allowNull: false
+    });
+  },
+
+  down: async (queryInterface, Sequelize) => {
+    await queryInterface.removeColumn("equipment_data", "hook_battery_1");
+
+    return await queryInterface.removeColumn(
+      "equipment_data",
+      "hook_battery_2"
+    );
+  }
+};

+ 11 - 28
seeders/20191127135703-EquipmentDataSeeder.js

@@ -1,50 +1,33 @@
-'use strict'
+"use strict";
 
-const faker = require('faker')
+const faker = require("faker");
 
-const alarms = ['Normal', 'Alarm', 'Low Battery']
+const alarms = ["Normal", "Alarm", "Low Battery"];
 
 function getEqumentData(ap_id) {
   return {
     ap_id,
     aid_id: faker.random.number({ min: 1, max: 10 }),
-    beacon_id: faker.hacker.noun() + faker.random.number({ min: 100, max: 999 }),
+    beacon_id:
+      faker.hacker.noun() + faker.random.number({ min: 100, max: 999 }),
     status: faker.random.number(3).toString(),
     battery: faker.random.number(100),
     alarm: alarms[faker.random.number(2)],
     latitude: faker.address.latitude(),
     longitude: faker.address.longitude(),
     created_at: faker.date.recent(1)
-  }
+  };
 }
 
 module.exports = {
   up: (queryInterface, Sequelize) => {
     return queryInterface.bulkInsert(
-      'equipment_data',
-      Array.from(Array(20).keys()).map(() => getEqumentData('1'))
-    )
-
-    /*
-      Add altering commands here.
-      Return a promise to correctly handle asynchronicity.
-
-      Example:
-      return queryInterface.bulkInsert('People', [{
-        name: 'John Doe',
-        isBetaMember: false
-      }], {});
-    */
+      "equipment_data",
+      Array.from(Array(20).keys()).map(() => getEqumentData("1"))
+    );
   },
 
   down: (queryInterface, Sequelize) => {
-    return queryInterface.bulkDelete('equipment_data', null, {})
-    /*
-      Add reverting commands here.
-      Return a promise to correctly handle asynchronicity.
-
-      Example:
-      return queryInterface.bulkDelete('People', null, {});
-    */
+    return queryInterface.bulkDelete("equipment_data", null, {});
   }
-}
+};

+ 48 - 0
seeders/20200201071649-UserSeeder.js

@@ -0,0 +1,48 @@
+"use strict";
+
+const bcrypt = require("bcrypt");
+const saltRounds = 10;
+
+const names = ["林", "李", "郭", "鄭", "楊", "黃", "陳", "連", "周", "何"];
+
+async function getUserData(name) {
+  const password = await bcrypt.hashSync("test", saltRounds);
+
+  return {
+    password,
+    name,
+    permission: 1
+  };
+}
+
+module.exports = {
+  up: async (queryInterface, Sequelize) => {
+    const getUserPromises = Array.from(Array(10).keys()).map(index =>
+      getUserData(names[index])
+    );
+
+    const users = await Promise.all(getUserPromises);
+
+    return queryInterface.bulkInsert("users", users);
+    /*
+      Add altering commands here.
+      Return a promise to correctly handle asynchronicity.
+
+      Example:
+      return queryInterface.bulkInsert('People', [{
+        name: 'John Doe',
+        isBetaMember: false
+      }], {});
+    */
+  },
+
+  down: (queryInterface, Sequelize) => {
+    /*
+      Add reverting commands here.
+      Return a promise to correctly handle asynchronicity.
+
+      Example:
+      return queryInterface.bulkDelete('People', null, {});
+    */
+  }
+};

+ 43 - 36
src/controllers/EquipmentController.ts

@@ -1,11 +1,11 @@
-import { Request, Response } from 'express'
-import { User } from '../database/models/User'
-import { Equipment } from '../database/models/Equipment'
-import { sequelize } from '../database'
-import { networkError } from './Error'
-import { Site } from '../database/models/Site'
-import { EquipmentData } from '../database/models/EquipmentData'
-import { sendUpdateRequest, sendAlarm } from '../firebase'
+import { Request, Response } from "express";
+import { User } from "../database/models/User";
+import { Equipment } from "../database/models/Equipment";
+import { sequelize } from "../database";
+import { networkError } from "./Error";
+import { Site } from "../database/models/Site";
+import { EquipmentData } from "../database/models/EquipmentData";
+import { sendUpdateRequest, sendAlarm } from "../firebase";
 
 class EquipmentController {
   async getEquipments(req: Request, res: Response) {
@@ -18,40 +18,40 @@ class EquipmentController {
          WHERE equipment_data.id IN
            (SELECT max(id) FROM equipment_data GROUP BY aid_id)
          `
-      )
+      );
 
-      const sites = await Site.findAll()
+      const sites = await Site.findAll();
 
-      res.json({ equipments, sites })
+      res.json({ equipments, sites });
     } catch (error) {
-      networkError(res, JSON.stringify(error))
+      networkError(res, JSON.stringify(error));
     }
   }
 
   async assignUserToEquipment(req: Request, res: Response) {
     try {
-      const { user_id: userId, equipment_id: equipmentId } = req.body
-      const user = await User.findByPk(userId)
-      const equipment = await Equipment.findByPk(equipmentId)
+      const { user_id: userId, equipment_id: equipmentId } = req.body;
+      const user = await User.findByPk(userId);
+      const equipment = await Equipment.findByPk(equipmentId);
 
       if (!user) {
         res.status(404).json({
-          message: 'User not found'
-        })
-        return
+          message: "User not found"
+        });
+        return;
       }
 
       if (!equipment) {
         res.status(400).json({
-          message: 'Equipment not found'
-        })
-        return
+          message: "Equipment not found"
+        });
+        return;
       }
 
-      await equipment.update({ current_user_id: user.id })
-      res.status(200).json({ message: 'ok' })
+      await equipment.update({ current_user_id: user.id });
+      res.status(200).json({ message: "ok" });
     } catch (error) {
-      networkError(res, JSON.stringify(error))
+      networkError(res, JSON.stringify(error));
     }
   }
 
@@ -62,15 +62,15 @@ class EquipmentController {
       Rest: 2,
       Alarm: 3,
       SOS: 4
-    }
+    };
 
-    var statusId = Status[req.body.Status] ? Status[req.body.Status] : 1
+    var statusId = Status[req.body.Status] ? Status[req.body.Status] : 1;
 
-    const equipment = await Equipment.findByPk(Number(req.body.AidID))
+    const equipment = await Equipment.findByPk(Number(req.body.AidID));
 
     if (!equipment) {
-      res.status(400).json({ message: 'Equipment not found.' })
-      return
+      res.status(400).json({ message: "Equipment not found." });
+      return;
     }
 
     await EquipmentData.create({
@@ -81,18 +81,25 @@ class EquipmentController {
       battery: req.body.Battery,
       latitude: req.body.GPS_Lat,
       longitude: req.body.GPS_Lon,
+      hook_battery_1: req.body.BattHook1,
+      hook_battery_2: req.body.BattHook2,
       alarm: JSON.stringify(req.body.Alarm)
-    })
+    });
 
-    if (req.body.Alarm.length > 0 && equipment.current_alarm_type != req.body.Alarm[0]) {
-      sendAlarm(equipment.name, String(req.body.Alarm[0]))
+    if (
+      req.body.Alarm.length > 0 &&
+      equipment.current_alarm_type != req.body.Alarm[0]
+    ) {
+      sendAlarm(equipment.name, String(req.body.Alarm[0]));
     } else {
-      sendUpdateRequest()
+      sendUpdateRequest();
     }
 
-    equipment.update({ current_alarm_type: req.body.Alarm.length > 0 ? req.body.Alarm[0] : null })
-    res.json({ message: 'ok' })
+    equipment.update({
+      current_alarm_type: req.body.Alarm.length > 0 ? req.body.Alarm[0] : null
+    });
+    res.json({ message: "ok" });
   }
 }
 
-export default EquipmentController
+export default EquipmentController;

+ 28 - 13
src/database/models/EquipmentData.ts

@@ -1,32 +1,47 @@
-import { Table, Model, CreatedAt, Column, UpdatedAt } from 'sequelize-typescript'
-import { DataTypes } from 'sequelize'
-
-@Table({ tableName: 'equipment_data', updatedAt: false })
+import {
+  Table,
+  Model,
+  CreatedAt,
+  Column,
+  UpdatedAt,
+  Default
+} from "sequelize-typescript";
+import { DataTypes } from "sequelize";
+
+@Table({ tableName: "equipment_data", updatedAt: false })
 export class EquipmentData extends Model<EquipmentData> {
   @Column
-  ap_id: string
+  ap_id: string;
+
+  @Column
+  aid_id: string;
+
+  @Column
+  beacon_id: string;
 
   @Column
-  aid_id: string
+  status: string;
 
   @Column
-  beacon_id: string
+  battery: Number;
 
   @Column
-  status: string
+  alarm: string;
 
   @Column
-  battery: Number
+  latitude: Number;
 
   @Column
-  alarm: string
+  longitude: Number;
 
+  @Default(0)
   @Column
-  latitude: Number
+  hook_battery_1: Number;
 
+  @Default(0)
   @Column
-  longitude: Number
+  hook_battery_2: Number;
 
   @CreatedAt
-  created_at: Date
+  created_at: Date;
 }

+ 15 - 13
src/requests/EquipmentDataRequest.ts

@@ -1,16 +1,18 @@
-import { check } from 'express-validator'
+import { check } from "express-validator";
 
 const EquipmentDataRequest = [
-  check('APID').exists(),
-  check('Time').exists(),
-  check('AidID').exists(),
-  check('GPS_Lat').exists(),
-  check('GPS_Lon').exists(),
-  check('Baecon').exists(),
-  check('Status').exists(),
-  check('Battery').exists(),
-  check('Alarm').exists(),
-  check('Alarm').isArray()
-]
+  check("APID").exists(),
+  check("Time").exists(),
+  check("AidID").exists(),
+  check("GPS_Lat").exists(),
+  check("GPS_Lon").exists(),
+  check("Baecon").exists(),
+  check("Status").exists(),
+  check("Battery").exists(),
+  check("BattHook1").exists(),
+  check("BattHook2").exists(),
+  check("Alarm").exists(),
+  check("Alarm").isArray()
+];
 
-export default EquipmentDataRequest
+export default EquipmentDataRequest;