Browse Source

notification

kungtinglin 6 years ago
parent
commit
100f9b44dc
6 changed files with 53 additions and 4 deletions
  1. 1 0
      .gitignore
  2. 1 0
      package.json
  3. 3 0
      src/app.ts
  4. 13 3
      src/controllers/EquipmentController.ts
  5. 33 0
      src/firebase.ts
  6. 2 1
      src/routes.ts

+ 1 - 0
.gitignore

@@ -5,3 +5,4 @@ yarn.lock
 yarn-error.log
 src/env.ts
 .env
+maa-client-firebase-adminsdk-4dont-9a7175f84c.json

+ 1 - 0
package.json

@@ -25,6 +25,7 @@
     "express": "~4.16.1",
     "express-validator": "^6.2.0",
     "faker": "^4.1.0",
+    "firebase-admin": "^8.8.0",
     "jsonwebtoken": "^8.5.1",
     "mariadb": "^2.1.1",
     "morgan": "~1.9.1",

+ 3 - 0
src/app.ts

@@ -3,6 +3,7 @@ import morgan from 'morgan'
 import './env'
 import { sequelize } from './database'
 import { loadRoute } from './container'
+import { initializeFirebase } from './firebase'
 
 const app: express.Application = express()
 
@@ -11,6 +12,8 @@ app.use(express.json())
 app.use(express.urlencoded({ extended: false }))
 app.use('/', loadRoute())
 
+initializeFirebase()
+
 sequelize
   .authenticate()
   .then(() => {

+ 13 - 3
src/controllers/EquipmentController.ts

@@ -3,19 +3,24 @@ 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 { sendAlarm } from '../firebase'
 
 class EquipmentController {
   async getEquipments(req: Request, res: Response) {
     try {
-      const result = await sequelize.query(
-        `SELECT * FROM equipment_data
+      const [equipments] = await sequelize.query(
+        `SELECT equipment_data.*, equipments.id AS equipment_id, equipments.name AS equipment_name, equipments.site_id, equipments.current_user_id, users.name AS user_name FROM equipment_data
          JOIN equipments ON aid_id = equipments.id
+         LEFT JOIN users ON equipments.current_user_id = users.id
          WHERE equipment_data.id IN
            (SELECT max(id) FROM equipment_data GROUP BY aid_id)
          `
       )
 
-      res.json(result[0])
+      const sites = await Site.findAll()
+
+      res.json({ equipments, sites })
     } catch (error) {
       networkError(res, JSON.stringify(error))
     }
@@ -47,6 +52,11 @@ class EquipmentController {
       networkError(res, JSON.stringify(error))
     }
   }
+
+  async receiveEquipmentData(req: Request, res: Response) {
+    sendAlarm('輔具 A', '緊急')
+    res.json({ message: 'ok' })
+  }
 }
 
 export default EquipmentController

+ 33 - 0
src/firebase.ts

@@ -0,0 +1,33 @@
+const config = require('../maa-client-firebase-adminsdk-4dont-9a7175f84c.json')
+// const admin = require('firebase-admin')
+import admin from 'firebase-admin'
+
+export function initializeFirebase() {
+  admin.initializeApp({
+    credential: admin.credential.cert(config),
+    databaseURL: 'https://maa-client.firebaseio.com'
+  })
+}
+
+export function sendAlarm(equipmentName: string, alarmType: string) {
+  var message: admin.messaging.Message = {
+    data: {
+      name: equipmentName,
+      type: alarmType
+    },
+    android: {
+      priority: 'high'
+    },
+    topic: 'maa'
+  }
+
+  admin
+    .messaging()
+    .send(message)
+    .then(response => {
+      console.log('Message sent', response)
+    })
+    .catch(error => {
+      console.log('Message error ', error)
+    })
+}

+ 2 - 1
src/routes.ts

@@ -28,5 +28,6 @@ export const routes: Array<route> = [
     action: 'EquipmentController@assignUserToEquipment',
     validator: AssignEquipmentRequest
   },
-  { url: '/users', method: 'get', action: 'AuthController@getUsers' }
+  { url: '/users', method: 'get', action: 'AuthController@getUsers' },
+  { url: '/equipments', method: 'post', action: 'EquipmentController@receiveEquipmentData' }
 ]