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) { try { 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) ` ) const sites = await Site.findAll() res.json({ equipments, sites }) } catch (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) if (!user) { res.status(404).json({ message: 'User not found' }) return } if (!equipment) { res.status(400).json({ message: 'Equipment not found' }) return } await equipment.update({ current_user_id: user.id }) res.status(200).json({ message: 'ok' }) } catch (error) { networkError(res, JSON.stringify(error)) } } async receiveEquipmentData(req: Request, res: Response) { const Status: { [index: string]: Number } = { Offline: 0, Normal: 1, Rest: 2, SOS: 3 } var statusId = Status[req.body.Status] ? Status[req.body.Status] : 1 const equipment = await Equipment.findByPk(req.body.AidID) if (req.body.Alarm.length > 0) { sendAlarm(equipment ? equipment.name : `輔具ID ${req.body.AidID}`, req.body.Alarm[0]) } await EquipmentData.create({ ap_id: req.body.APID, aid_id: req.body.AidID, beacon_id: req.body.Baecon, status: statusId, battery: req.body.Battery, latitude: req.body.GPS_Lat, longitude: req.body.GPS_Lon, alarm: JSON.stringify(req.body.Alarm) }) sendUpdateRequest() res.json({ message: 'ok' }) } } export default EquipmentController