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, Alarm: 3, SOS: 4 }; var statusId = Status[req.body.Status] ? Status[req.body.Status] : 1; const equipment = await Equipment.findByPk(Number(req.body.AidID)); if (!equipment) { res.status(400).json({ message: "Equipment not found." }); return; } 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, 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])); } else { sendUpdateRequest(); } equipment.update({ current_alarm_type: req.body.Alarm.length > 0 ? req.body.Alarm[0] : null }); res.json({ message: "ok" }); } } export default EquipmentController;