UNPKG

@opengis/fastify-table

Version:

core-plugins

45 lines (31 loc) 1.6 kB
import getMeta from '../../../pg/funcs/getMeta.js'; export default async function getInsertQuery({ pg, table, data, id, uid, }) { if (!pg?.pk || !data) { return null; } const { columns } = await getMeta({ pg, table }); if (!columns) { return null; } const names = columns.map((el) => el.name); Object.assign(data, { ...(id && pg.pk?.[table] ? { [pg.pk?.[table]]: id } : {}), ...(table !== 'admin.users' ? { uid } : {}), editor_id: uid, created_by: uid, updated_by: uid, // editor_id: uid, }); const systemColumns = ['cdate', 'editor_date', 'created_at', 'updated_at'].filter((el) => names.includes(el)).map((el) => [el, 'now()']); const systemColumnNames = systemColumns.map(el => el[0]); const filterData = Object.keys(data) .filter((el) => !systemColumnNames.includes(el) && (typeof data[el] === 'boolean' ? true : data[el]) && names.includes(el)).map((el) => [el, data[el]]); const insertQuery = `insert into ${table} ( ${filterData?.map((key) => `"${key[0]}"`).concat(systemColumnNames).join(',')}) values (${filterData?.map((key, i) => (key[0] === 'geom' ? `st_setsrid(st_geomfromgeojson($${i + 1}::json),4326)` : `$${i + 1}`)).concat(systemColumns.map((el) => el[1])).join(',')}) returning *`; const args = [...filterData.map((el) => (typeof el[1] === 'object' && (!Array.isArray(el[1]) || typeof el[1]?.[0] === 'object') ? JSON.stringify(el[1]) : el[1]))]; return { insertQuery, args }; }