"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getDeviceStats = exports.deleteDevice = exports.updateDeviceStatus = exports.updateDevice = exports.createDevice = exports.getDevicesByType = exports.getDevicesByRoom = exports.getDeviceById = exports.getAllDevices = void 0; const connection_1 = require("../database/connection"); const getAllDevices = async (req, res) => { try { const query = ` SELECT d.*, r.name as room_name, r.floor_id FROM room_devices d LEFT JOIN rooms r ON d.room_id = r.id ORDER BY r.floor_id, r.room_number, d.name `; const devices = await (0, connection_1.executeQuery)(query); return res.status(200).json({ success: true, data: devices }); } catch (error) { console.error('Error fetching devices:', error); return res.status(500).json({ success: false, message: 'Failed to fetch devices', error: error instanceof Error ? error.message : 'Unknown error' }); } }; exports.getAllDevices = getAllDevices; const getDeviceById = async (req, res) => { try { const deviceId = req.params.id; const query = ` SELECT d.*, r.name as room_name, r.floor_id FROM room_devices d LEFT JOIN rooms r ON d.room_id = r.id WHERE d.id = ? `; const device = await (0, connection_1.executeQuery)(query, [deviceId]); if (!device || (Array.isArray(device) && device.length === 0)) { return res.status(404).json({ success: false, message: 'Device not found' }); } return res.status(200).json({ success: true, data: Array.isArray(device) ? device[0] : device }); } catch (error) { console.error('Error fetching device:', error); return res.status(500).json({ success: false, message: 'Failed to fetch device', error: error instanceof Error ? error.message : 'Unknown error' }); } }; exports.getDeviceById = getDeviceById; const getDevicesByRoom = async (req, res) => { try { const roomId = req.params.roomId; const query = 'SELECT * FROM room_devices WHERE room_id = ? ORDER BY name'; const devices = await (0, connection_1.executeQuery)(query, [roomId]); return res.status(200).json({ success: true, data: devices }); } catch (error) { console.error('Error fetching devices by room:', error); return res.status(500).json({ success: false, message: 'Failed to fetch devices by room', error: error instanceof Error ? error.message : 'Unknown error' }); } }; exports.getDevicesByRoom = getDevicesByRoom; const getDevicesByType = async (req, res) => { try { const deviceType = req.params.type; const query = ` SELECT d.*, r.name as room_name, r.floor_id FROM room_devices d LEFT JOIN rooms r ON d.room_id = r.id WHERE d.type = ? ORDER BY r.floor_id, r.room_number, d.name `; const devices = await (0, connection_1.executeQuery)(query, [deviceType]); return res.status(200).json({ success: true, data: devices }); } catch (error) { console.error('Error fetching devices by type:', error); return res.status(500).json({ success: false, message: 'Failed to fetch devices by type', error: error instanceof Error ? error.message : 'Unknown error' }); } }; exports.getDevicesByType = getDevicesByType; const createDevice = async (req, res) => { try { const { name, type, model, room_id, status, properties } = req.body; const propertiesJson = properties ? JSON.stringify(properties) : null; const query = ` INSERT INTO room_devices (name, type, model, room_id, status, properties) VALUES (?, ?, ?, ?, ?, ?) `; const result = await (0, connection_1.executeQuery)(query, [name, type, model, room_id, status, propertiesJson]); return res.status(201).json({ success: true, message: 'Device created successfully', data: { id: result.insertId, name, type, model, room_id, status, properties: propertiesJson } }); } catch (error) { console.error('Error creating device:', error); return res.status(500).json({ success: false, message: 'Failed to create device', error: error instanceof Error ? error.message : 'Unknown error' }); } }; exports.createDevice = createDevice; const updateDevice = async (req, res) => { try { const deviceId = req.params.id; const { name, type, model, room_id, status, properties } = req.body; const propertiesJson = properties ? JSON.stringify(properties) : null; const query = ` UPDATE room_devices SET name = ?, type = ?, model = ?, room_id = ?, status = ?, properties = ? WHERE id = ? `; await (0, connection_1.executeQuery)(query, [name, type, model, room_id, status, propertiesJson, deviceId]); return res.status(200).json({ success: true, message: 'Device updated successfully' }); } catch (error) { console.error('Error updating device:', error); return res.status(500).json({ success: false, message: 'Failed to update device', error: error instanceof Error ? error.message : 'Unknown error' }); } }; exports.updateDevice = updateDevice; const updateDeviceStatus = async (req, res) => { try { const deviceId = req.params.id; const { status } = req.body; const query = 'UPDATE room_devices SET status = ? WHERE id = ?'; await (0, connection_1.executeQuery)(query, [status, deviceId]); return res.status(200).json({ success: true, message: 'Device status updated successfully' }); } catch (error) { console.error('Error updating device status:', error); return res.status(500).json({ success: false, message: 'Failed to update device status', error: error instanceof Error ? error.message : 'Unknown error' }); } }; exports.updateDeviceStatus = updateDeviceStatus; const deleteDevice = async (req, res) => { try { const deviceId = req.params.id; const query = 'DELETE FROM room_devices WHERE id = ?'; await (0, connection_1.executeQuery)(query, [deviceId]); return res.status(200).json({ success: true, message: 'Device deleted successfully' }); } catch (error) { console.error('Error deleting device:', error); return res.status(500).json({ success: false, message: 'Failed to delete device', error: error instanceof Error ? error.message : 'Unknown error' }); } }; exports.deleteDevice = deleteDevice; const getDeviceStats = async (req, res) => { try { const totalDevicesQuery = 'SELECT COUNT(*) as total FROM room_devices'; const totalDevicesResult = await (0, connection_1.executeQuery)(totalDevicesQuery); const totalDevices = totalDevicesResult[0].total; const onlineDevicesQuery = 'SELECT COUNT(*) as online FROM room_devices WHERE status = "online"'; const onlineDevicesResult = await (0, connection_1.executeQuery)(onlineDevicesQuery); const onlineDevices = onlineDevicesResult[0].online; const offlineDevicesQuery = 'SELECT COUNT(*) as offline FROM room_devices WHERE status = "offline"'; const offlineDevicesResult = await (0, connection_1.executeQuery)(offlineDevicesQuery); const offlineDevices = offlineDevicesResult[0].offline; const devicesByTypeQuery = 'SELECT type, COUNT(*) as count FROM room_devices GROUP BY type'; const devicesByTypeResult = await (0, connection_1.executeQuery)(devicesByTypeQuery); return res.status(200).json({ success: true, data: { totalDevices, onlineDevices, offlineDevices, devicesByType: devicesByTypeResult } }); } catch (error) { console.error('Error fetching device stats:', error); return res.status(500).json({ success: false, message: 'Failed to fetch device statistics', error: error instanceof Error ? error.message : 'Unknown error' }); } }; exports.getDeviceStats = getDeviceStats; //# sourceMappingURL=roomDeviceController.js.map