@opengis/fastify-table
Version:
core-plugins
57 lines (46 loc) • 1.82 kB
JavaScript
import config from '../../../config.js';
import pgClients from '../pg/pgClients.js';
import getTemplate from '../table/funcs/getTemplate.js';
const defaultTable = 'crm.extra_data';
function format(key, value, schema) {
if (!key || !schema?.[key]) return undefined; // skip non-existing
if (schema?.[key]?.type && ['datalist', 'datatable', 'number', 'switcher'].includes(schema?.[key]?.type?.toLowerCase())) {
return JSON.parse(value || null);
}
return value;
}
export default async function extraDataGet({
rows = [], table, form,
}, pg = pgClients.client) {
const ids = rows.map(row => row.id).filter(el => el);
if (!ids?.length || !form || !table) {
return null;
}
const loadTemplate = await getTemplate('form', form);
if (!loadTemplate?.extra) return null;
const extraDataTable = config.extraData?.[table]
|| config.extraData?.[table.split('.').shift()]
|| config.extraData?.default
|| config.extraData
|| defaultTable;
if (!pg.pk?.[table]) {
return { error: `table pk not found: ${table}`, status: 404 };
}
if (!pg.pk?.[extraDataTable]) {
return { error: `extra table pk not found: ${extraDataTable}`, status: 404 };
}
const { rows: extraRows = [] } = await pg.query(`select * from ${extraDataTable} where object_id=any($1::text[])`, [ids]);
if (rows?.length && extraRows?.length) {
rows.forEach(row => {
Object.assign(row, {
...extraRows
.filter(el => el.object_id === row.id && (el.value_text || el.value_array))
.reduce((acc, curr) => {
acc[curr.property_key] = format(curr.property_key, curr.value_text || curr.value_array, loadTemplate?.schema);
return acc;
}, {}),
});
});
}
return null;
}