import dbHandler from "../db-handler"; import sqlGenerator from "../../utils/sql-generator"; export default async function DbSelect({ table, query, count, targetId, config, }) { let sqlObj = null; try { const finalQuery = query || {}; sqlObj = sqlGenerator({ tableName: table, genObject: finalQuery, targetId, }); const sql = sqlObj.string; const res = dbHandler({ query: sql, values: sqlObj.values, config, }); if (!res.success) { return { ...res, debug: { sqlObj, sql } }; } const batchRes = res.payload || []; let resp = { success: Boolean(batchRes[0]), payload: batchRes, singleRes: batchRes[0], debug: { sqlObj, sql, }, }; if (count) { const count_sql_object = sqlGenerator({ tableName: table, genObject: finalQuery, targetId, count, }); const count_sql = `SELECT COUNT(*) AS count FROM (${count_sql_object.string}) AS c`; const count_res = dbHandler({ query: count_sql, values: count_sql_object.values, config, }); if (!count_res.success) { return { ...resp, success: false, error: count_res.error, msg: "Database count failed", debug: { ...resp.debug, count_sql }, }; } resp["count"] = Number(count_res.singleRes?.count); resp["debug"]["count_sql"] = count_sql; } return resp; } catch (error) { return { success: false, error: error.message, debug: { sqlObj, }, }; } }