roomDeviceController.js 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.getDeviceStats = exports.deleteDevice = exports.updateDeviceStatus = exports.updateDevice = exports.createDevice = exports.getDevicesByType = exports.getDevicesByRoom = exports.getDeviceById = exports.getAllDevices = void 0;
  4. const connection_1 = require("../database/connection");
  5. const getAllDevices = async (req, res) => {
  6. try {
  7. const query = `
  8. SELECT d.*, r.name as room_name, r.floor_id
  9. FROM room_devices d
  10. LEFT JOIN rooms r ON d.room_id = r.id
  11. ORDER BY r.floor_id, r.room_number, d.name
  12. `;
  13. const devices = await (0, connection_1.executeQuery)(query);
  14. return res.status(200).json({
  15. success: true,
  16. data: devices
  17. });
  18. }
  19. catch (error) {
  20. console.error('Error fetching devices:', error);
  21. return res.status(500).json({
  22. success: false,
  23. message: 'Failed to fetch devices',
  24. error: error instanceof Error ? error.message : 'Unknown error'
  25. });
  26. }
  27. };
  28. exports.getAllDevices = getAllDevices;
  29. const getDeviceById = async (req, res) => {
  30. try {
  31. const deviceId = req.params.id;
  32. const query = `
  33. SELECT d.*, r.name as room_name, r.floor_id
  34. FROM room_devices d
  35. LEFT JOIN rooms r ON d.room_id = r.id
  36. WHERE d.id = ?
  37. `;
  38. const device = await (0, connection_1.executeQuery)(query, [deviceId]);
  39. if (!device || (Array.isArray(device) && device.length === 0)) {
  40. return res.status(404).json({
  41. success: false,
  42. message: 'Device not found'
  43. });
  44. }
  45. return res.status(200).json({
  46. success: true,
  47. data: Array.isArray(device) ? device[0] : device
  48. });
  49. }
  50. catch (error) {
  51. console.error('Error fetching device:', error);
  52. return res.status(500).json({
  53. success: false,
  54. message: 'Failed to fetch device',
  55. error: error instanceof Error ? error.message : 'Unknown error'
  56. });
  57. }
  58. };
  59. exports.getDeviceById = getDeviceById;
  60. const getDevicesByRoom = async (req, res) => {
  61. try {
  62. const roomId = req.params.roomId;
  63. const query = 'SELECT * FROM room_devices WHERE room_id = ? ORDER BY name';
  64. const devices = await (0, connection_1.executeQuery)(query, [roomId]);
  65. return res.status(200).json({
  66. success: true,
  67. data: devices
  68. });
  69. }
  70. catch (error) {
  71. console.error('Error fetching devices by room:', error);
  72. return res.status(500).json({
  73. success: false,
  74. message: 'Failed to fetch devices by room',
  75. error: error instanceof Error ? error.message : 'Unknown error'
  76. });
  77. }
  78. };
  79. exports.getDevicesByRoom = getDevicesByRoom;
  80. const getDevicesByType = async (req, res) => {
  81. try {
  82. const deviceType = req.params.type;
  83. const query = `
  84. SELECT d.*, r.name as room_name, r.floor_id
  85. FROM room_devices d
  86. LEFT JOIN rooms r ON d.room_id = r.id
  87. WHERE d.type = ?
  88. ORDER BY r.floor_id, r.room_number, d.name
  89. `;
  90. const devices = await (0, connection_1.executeQuery)(query, [deviceType]);
  91. return res.status(200).json({
  92. success: true,
  93. data: devices
  94. });
  95. }
  96. catch (error) {
  97. console.error('Error fetching devices by type:', error);
  98. return res.status(500).json({
  99. success: false,
  100. message: 'Failed to fetch devices by type',
  101. error: error instanceof Error ? error.message : 'Unknown error'
  102. });
  103. }
  104. };
  105. exports.getDevicesByType = getDevicesByType;
  106. const createDevice = async (req, res) => {
  107. try {
  108. const { name, type, model, room_id, status, properties } = req.body;
  109. const propertiesJson = properties ? JSON.stringify(properties) : null;
  110. const query = `
  111. INSERT INTO room_devices (name, type, model, room_id, status, properties)
  112. VALUES (?, ?, ?, ?, ?, ?)
  113. `;
  114. const result = await (0, connection_1.executeQuery)(query, [name, type, model, room_id, status, propertiesJson]);
  115. return res.status(201).json({
  116. success: true,
  117. message: 'Device created successfully',
  118. data: {
  119. id: result.insertId,
  120. name,
  121. type,
  122. model,
  123. room_id,
  124. status,
  125. properties: propertiesJson
  126. }
  127. });
  128. }
  129. catch (error) {
  130. console.error('Error creating device:', error);
  131. return res.status(500).json({
  132. success: false,
  133. message: 'Failed to create device',
  134. error: error instanceof Error ? error.message : 'Unknown error'
  135. });
  136. }
  137. };
  138. exports.createDevice = createDevice;
  139. const updateDevice = async (req, res) => {
  140. try {
  141. const deviceId = req.params.id;
  142. const { name, type, model, room_id, status, properties } = req.body;
  143. const propertiesJson = properties ? JSON.stringify(properties) : null;
  144. const query = `
  145. UPDATE room_devices
  146. SET name = ?, type = ?, model = ?, room_id = ?, status = ?, properties = ?
  147. WHERE id = ?
  148. `;
  149. await (0, connection_1.executeQuery)(query, [name, type, model, room_id, status, propertiesJson, deviceId]);
  150. return res.status(200).json({
  151. success: true,
  152. message: 'Device updated successfully'
  153. });
  154. }
  155. catch (error) {
  156. console.error('Error updating device:', error);
  157. return res.status(500).json({
  158. success: false,
  159. message: 'Failed to update device',
  160. error: error instanceof Error ? error.message : 'Unknown error'
  161. });
  162. }
  163. };
  164. exports.updateDevice = updateDevice;
  165. const updateDeviceStatus = async (req, res) => {
  166. try {
  167. const deviceId = req.params.id;
  168. const { status } = req.body;
  169. const query = 'UPDATE room_devices SET status = ? WHERE id = ?';
  170. await (0, connection_1.executeQuery)(query, [status, deviceId]);
  171. return res.status(200).json({
  172. success: true,
  173. message: 'Device status updated successfully'
  174. });
  175. }
  176. catch (error) {
  177. console.error('Error updating device status:', error);
  178. return res.status(500).json({
  179. success: false,
  180. message: 'Failed to update device status',
  181. error: error instanceof Error ? error.message : 'Unknown error'
  182. });
  183. }
  184. };
  185. exports.updateDeviceStatus = updateDeviceStatus;
  186. const deleteDevice = async (req, res) => {
  187. try {
  188. const deviceId = req.params.id;
  189. const query = 'DELETE FROM room_devices WHERE id = ?';
  190. await (0, connection_1.executeQuery)(query, [deviceId]);
  191. return res.status(200).json({
  192. success: true,
  193. message: 'Device deleted successfully'
  194. });
  195. }
  196. catch (error) {
  197. console.error('Error deleting device:', error);
  198. return res.status(500).json({
  199. success: false,
  200. message: 'Failed to delete device',
  201. error: error instanceof Error ? error.message : 'Unknown error'
  202. });
  203. }
  204. };
  205. exports.deleteDevice = deleteDevice;
  206. const getDeviceStats = async (req, res) => {
  207. try {
  208. const totalDevicesQuery = 'SELECT COUNT(*) as total FROM room_devices';
  209. const totalDevicesResult = await (0, connection_1.executeQuery)(totalDevicesQuery);
  210. const totalDevices = totalDevicesResult[0].total;
  211. const onlineDevicesQuery = 'SELECT COUNT(*) as online FROM room_devices WHERE status = "online"';
  212. const onlineDevicesResult = await (0, connection_1.executeQuery)(onlineDevicesQuery);
  213. const onlineDevices = onlineDevicesResult[0].online;
  214. const offlineDevicesQuery = 'SELECT COUNT(*) as offline FROM room_devices WHERE status = "offline"';
  215. const offlineDevicesResult = await (0, connection_1.executeQuery)(offlineDevicesQuery);
  216. const offlineDevices = offlineDevicesResult[0].offline;
  217. const devicesByTypeQuery = 'SELECT type, COUNT(*) as count FROM room_devices GROUP BY type';
  218. const devicesByTypeResult = await (0, connection_1.executeQuery)(devicesByTypeQuery);
  219. return res.status(200).json({
  220. success: true,
  221. data: {
  222. totalDevices,
  223. onlineDevices,
  224. offlineDevices,
  225. devicesByType: devicesByTypeResult
  226. }
  227. });
  228. }
  229. catch (error) {
  230. console.error('Error fetching device stats:', error);
  231. return res.status(500).json({
  232. success: false,
  233. message: 'Failed to fetch device statistics',
  234. error: error instanceof Error ? error.message : 'Unknown error'
  235. });
  236. }
  237. };
  238. exports.getDeviceStats = getDeviceStats;
  239. //# sourceMappingURL=roomDeviceController.js.map