Browse Source

EquipmentData

kungtinglin 6 năm trước cách đây
mục cha
commit
25f6b7bdd2

+ 1 - 1
.sequelizerc

@@ -2,7 +2,7 @@ const {resolve} = require('path')
 
 module.exports = {
   'migrations-path': resolve('migrations'),
-  'seeders-path': resolve('build', 'database', 'seeders'),
+  'seeders-path': resolve('seeders'),
   'models-path': resolve('build', 'database', 'models'),
   'config': resolve('build', 'database', 'config', 'config.js'),
 }

+ 3 - 1
migrations/20191124064121-create_equipment_data_table.js

@@ -20,7 +20,9 @@ module.exports = {
 
       alarm: Sequelize.STRING,
 
-      location: Sequelize.GEOMETRY,
+      latitude: Sequelize.DECIMAL(8, 5),
+
+      longitude: Sequelize.DECIMAL(8, 5),
 
       created_at: Sequelize.DATE
     })

+ 2 - 0
package.json

@@ -13,6 +13,7 @@
     "@types/dotenv": "^6.1.1",
     "@types/express": "^4.17.1",
     "@types/express-validator": "^3.0.0",
+    "@types/faker": "^4.1.7",
     "@types/jsonwebtoken": "^8.3.5",
     "@types/morgan": "^1.7.37",
     "@types/node": "^12.7.5",
@@ -23,6 +24,7 @@
     "dotenv": "^8.1.0",
     "express": "~4.16.1",
     "express-validator": "^6.2.0",
+    "faker": "^4.1.0",
     "jsonwebtoken": "^8.5.1",
     "mariadb": "^2.1.1",
     "morgan": "~1.9.1",

+ 50 - 0
seeders/20191127135703-EquipmentDataSeeder.js

@@ -0,0 +1,50 @@
+'use strict'
+
+const faker = require('faker')
+
+const alarms = ['Normal', 'Alarm', 'Low Battery']
+
+function getEqumentData(ap_id) {
+  return {
+    ap_id,
+    aid_id: `輔具編號 ${faker.random.number(5)}`,
+    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
+      }], {});
+    */
+  },
+
+  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, {});
+    */
+  }
+}

+ 22 - 0
src/controllers/EquipmentController.ts

@@ -0,0 +1,22 @@
+import { Request, Response } from 'express'
+import { EquipmentData } from '../database/models/EquipmentData'
+import { sequelize } from '../database'
+
+class EquipmentController {
+  async getEquipments(req: Request, res: Response) {
+    try {
+      const result = await sequelize.query(
+        'SELECT *  FROM equipment_data WHERE id IN (SELECT max(id) FROM equipment_data GROUP BY aid_id)'
+      )
+
+      res.json(result[0])
+    } catch (err) {
+      res.status(500).json({
+        msg: 'Internal network error',
+        reason: JSON.stringify(err)
+      })
+    }
+  }
+}
+
+export default EquipmentController

+ 1 - 0
src/controllers/index.ts

@@ -1 +1,2 @@
 export { default as AuthController } from './AuthController'
+export { default as EquipmentController } from './EquipmentController'

+ 31 - 0
src/database/models/EquipmentData.ts

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

+ 5 - 0
src/routes.ts

@@ -15,5 +15,10 @@ export const routes: Array<route> = [
     method: 'post',
     action: 'AuthController@login',
     validator: LoginRequest
+  },
+  {
+    url: '/equipments',
+    method: 'get',
+    action: 'EquipmentController@getEquipments'
   }
 ]