"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ClientConnectionModel = void 0; const database_1 = require("../config/database"); class ClientConnectionModel { static async getAll(limit, offset) { let query = 'SELECT * FROM vw_client_connections ORDER BY timestamp DESC'; const params = []; if (limit !== undefined) { query += ' LIMIT ?'; params.push(limit); if (offset !== undefined) { query += ' OFFSET ?'; params.push(offset); } } return await (0, database_1.executeQuery)(query, params); } static async getAllWithFilters(limit, offset, filters) { let query = 'SELECT * FROM vw_client_connections WHERE 1=1'; const params = []; if (filters?.clientid) { query += ' AND clientid LIKE ?'; params.push(`%${filters.clientid}%`); } if (filters?.event) { query += ' AND event = ?'; params.push(filters.event); } if (filters?.startDate) { query += ' AND timestamp >= ?'; params.push(new Date(filters.startDate)); } if (filters?.endDate) { query += ' AND timestamp <= ?'; params.push(new Date(filters.endDate)); } query += ' ORDER BY timestamp DESC'; if (limit !== undefined) { query += ' LIMIT ?'; params.push(limit); if (offset !== undefined) { query += ' OFFSET ?'; params.push(offset); } } return await (0, database_1.executeQuery)(query, params); } static async getCountWithFilters(filters) { let query = 'SELECT COUNT(*) as count FROM vw_client_connections WHERE 1=1'; const params = []; if (filters?.clientid) { query += ' AND clientid LIKE ?'; params.push(`%${filters.clientid}%`); } if (filters?.event) { query += ' AND event = ?'; params.push(filters.event); } if (filters?.startDate) { query += ' AND timestamp >= ?'; params.push(new Date(filters.startDate)); } if (filters?.endDate) { query += ' AND timestamp <= ?'; params.push(new Date(filters.endDate)); } const result = await (0, database_1.executeQuery)(query, params); return result[0].count; } static async getCount() { const query = 'SELECT COUNT(*) as count FROM vw_client_connections'; const result = await (0, database_1.executeQuery)(query); return result[0].count; } static async getByClientId(clientid, limit) { let query = 'SELECT * FROM vw_client_connections WHERE clientid = ? ORDER BY timestamp DESC'; const params = [clientid]; if (limit !== undefined) { query += ' LIMIT ?'; params.push(limit); } return await (0, database_1.executeQuery)(query, params); } static async getByEvent(event, limit) { let query = 'SELECT * FROM vw_client_connections WHERE event = ? ORDER BY timestamp DESC'; const params = [event]; if (limit !== undefined) { query += ' LIMIT ?'; params.push(limit); } return await (0, database_1.executeQuery)(query, params); } static async getByTimeRange(startTime, endTime) { const query = 'SELECT * FROM vw_client_connections WHERE timestamp BETWEEN ? AND ? ORDER BY timestamp DESC'; return await (0, database_1.executeQuery)(query, [startTime, endTime]); } static async getEventStats() { const query = 'SELECT event, COUNT(*) as count FROM vw_client_connections GROUP BY event'; return await (0, database_1.executeQuery)(query); } static async getConnectionStats() { const query = ` SELECT CASE WHEN event = 'client.connected' THEN 'connected' WHEN event = 'client.disconnected' THEN 'disconnected' ELSE 'other' END as connection_type, COUNT(*) as count FROM vw_client_connections WHERE event IN ('client.connected', 'client.disconnected') GROUP BY connection_type `; return await (0, database_1.executeQuery)(query); } static async create(connectionData) { const query = ` INSERT INTO client_connections (username, clientid, event, timestamp, connected_at, node, peername, sockname, proto_name, proto_ver, keepalive, clean_start, reason, connection_duration) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) `; const values = [ connectionData.username || null, connectionData.clientid, connectionData.event, connectionData.timestamp || new Date(), connectionData.connected_at || null, connectionData.node, connectionData.peername || '', connectionData.sockname || '', connectionData.proto_name || 'MQTT', connectionData.proto_ver || 4, connectionData.keepalive || 60, connectionData.clean_start ?? 1, connectionData.reason || null, connectionData.connection_duration || null ]; const result = await (0, database_1.executeQuery)(query, values); return { ...connectionData, id: result.insertId, created_at: new Date() }; } static async getById(id) { const query = 'SELECT * FROM vw_client_connections WHERE id = ?'; const results = await (0, database_1.executeQuery)(query, [id]); return results.length > 0 ? results[0] : null; } static async getDailyStats(days = 7) { const query = ` SELECT DATE(timestamp) as date, COUNT(*) as total_connections, SUM(CASE WHEN event = 'connect' THEN 1 ELSE 0 END) as connections, SUM(CASE WHEN event = 'disconnect' THEN 1 ELSE 0 END) as disconnections FROM vw_client_connections WHERE timestamp >= DATE_SUB(NOW(), INTERVAL ${days} DAY) GROUP BY DATE(timestamp) ORDER BY date DESC `; return await (0, database_1.executeQuery)(query); } } exports.ClientConnectionModel = ClientConnectionModel; //# sourceMappingURL=clientConnection.js.map