const pool = require("../config"); // Get all tags const getHistoryAlarmDb = async (searchParams = {}) => { let queryParams = []; if (searchParams.limit) { const page = Number(searchParams.page ?? 1) - 1; queryParams = [Number(searchParams.limit ?? 10), page]; } const { whereOrConditions, whereParamOr } = pool.buildStringOrIlike( [ "b.tag_name", "a.tagnum" ], searchParams.criteria, queryParams ); if (whereParamOr) queryParams = whereParamOr; const { whereConditions, whereParamAnd } = pool.buildFilterQuery( [ { column: "b.tag_name", param: searchParams.name, type: "string" }, { column: "b.tag_number", param: searchParams.name, type: "number" }, ], queryParams ); if (whereParamAnd) queryParams = whereParamAnd; const queryText = ` SELECT COUNT(*) OVER() AS total_data, a.*, b.tag_name, b.tag_number, b.lim_low_crash, b.lim_low, b.lim_high, b.lim_high_crash, c.status_color FROM alarm_history a LEFT JOIN m_tags b ON a.tagnum = b.tag_number AND b.deleted_at IS NULL LEFT JOIN m_status c ON a.status = c.status_number AND c.deleted_at IS NULL WHERE a.datetime IS NOT NULL ${whereConditions.length > 0 ? ` AND ${whereConditions.join(" AND ")}` : ""} ${whereOrConditions ? ` ${whereOrConditions}` : ""} ORDER BY a.datetime DESC ${searchParams.limit ? `OFFSET $2 * $1 ROWS FETCH NEXT $1 ROWS ONLY` : ''} `; const result = await pool.query(queryText, queryParams); const total = result?.recordset?.length > 0 ? parseInt(result.recordset[0].total_data, 10) : 0; return { data: result.recordset, total }; }; module.exports = { getHistoryAlarmDb, };