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 res = await dbHandler({ query: sqlObj.string, values: sqlObj.values, config, }); if (!res.success) { return { msg: "Database select failed", ...res, success: false, debug: { sqlObj, sql: sqlObj.string, }, }; } const batchRes = (res.payload || []); let resp = { success: true, payload: batchRes, single_res: batchRes[0], debug: { sqlObj, sql: sqlObj.string, }, }; if (count) { const countSqlObject = sqlGenerator({ tableName: table, genObject: finalQuery, targetId, count, }); const countSql = `SELECT COUNT(*) AS count FROM (${countSqlObject.string}) AS c`; const countRes = await dbHandler({ query: countSql, values: countSqlObject.values, config, }); if (!countRes.success) { return { ...resp, success: false, msg: "Database count failed", debug: { ...resp.debug, count_sql: countSql, }, }; } const countRows = countRes.payload || []; const countVal = countRows[0]?.count ?? countRows[0]?.["count"]; resp = { ...resp, count: Number(countVal), debug: { ...resp.debug, count_sql: countSql, }, }; } return resp; } catch (error) { return { success: false, error: error.message, debug: { sqlObj, }, }; } }