import dbHandler from "../db-handler"; import sqlInsertGenerator from "../../utils/sql-insert-generator"; import { sanitizeHtmlFieldsBatch } from "../../utils/sanitize-html-fields"; import grabDuplicateSafeInsertSql from "../grab-duplicate-safe-insert-sql"; export default async function DbInsert({ table, data, update_on_duplicate, config, }) { let sqlObj = null; try { const sanitizedData = sanitizeHtmlFieldsBatch({ table, data, config, }); const finalData = sanitizedData.map((d) => ({ created_at: Date.now(), updated_at: Date.now(), ...d, })); sqlObj = sqlInsertGenerator({ tableName: table, data: finalData, }) || null; if (!sqlObj) { return { success: false, msg: "No insert SQL generated", }; } let sql = sqlObj.query; if (update_on_duplicate && data[0]) { sql = await grabDuplicateSafeInsertSql({ data, table, sql }); } sql += ` RETURNING *`; const res = await dbHandler({ query: sql, values: sqlObj.values, config, }); if (!res.success) { return { success: false, msg: "Database insert failed", debug: { sqlObj, }, }; } return { ...res, success: Boolean(res?.insert_return?.affected_rows || res.insert_return?.last_insert_id), debug: { sqlObj, }, }; } catch (error) { return { success: false, error: error.message, debug: { sqlObj, }, }; } }