@opengis/fastify-table 1.3.39 → 1.3.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengis/fastify-table",
3
- "version": "1.3.39",
3
+ "version": "1.3.41",
4
4
  "type": "module",
5
5
  "description": "core-plugins",
6
6
  "keywords": [
@@ -5,7 +5,6 @@ import pgClients from '../../pg/pgClients.js';
5
5
 
6
6
  import logChanges from './utils/logChanges.js';
7
7
  import extraData from '../../extra/extraData.js';
8
- import logger from '../../logger/getLogger.js';
9
8
 
10
9
  const rclient = getRedis();
11
10
 
@@ -28,33 +27,29 @@ export default async function dataInsert({
28
27
  if (!columns) return null;
29
28
 
30
29
  const names = columns.map((el) => el.name);
31
- const types = columns.reduce((acc, { name, dataTypeID }) => ({ ...acc, [name]: pg.pgType?.[dataTypeID] }), {});
32
30
 
33
31
  Object.assign(data, {
34
32
  ...(id && pg.pk?.[table] ? { [pg.pk?.[table]]: id } : {}),
35
33
  ...(table !== 'admin.users' ? { uid } : {}),
34
+ editor_id: uid, created_by: uid, updated_by: uid,
36
35
  // editor_id: uid,
37
36
  });
38
- const systemColumns = ['cdate', 'editor_date'].filter((el) => names.includes(el)).map((el) => [el, 'now()']);
37
+
38
+ const systemColumns = ['cdate', 'editor_date', 'created_at', 'updated_at'].filter((el) => names.includes(el)).map((el) => [el, 'now()']);
39
+ const systemColumnNames = systemColumns.map(el => el[0]);
39
40
 
40
41
  const filterData = Object.keys(data)
41
- .filter((el) => !['cdate', 'editor_date'].includes(el) && (typeof data[el] === 'boolean' ? true : data[el]) && names.includes(el)).map((el) => [el, data[el]]);
42
- if (!filterData?.length) {
43
- return null;
44
- }
42
+ .filter((el) => !systemColumnNames.includes(el) && (typeof data[el] === 'boolean' ? true : data[el]) && names.includes(el)).map((el) => [el, data[el]]);
45
43
 
46
44
  const insertQuery = `insert into ${table}
47
45
 
48
- ( ${filterData?.map((key) => `"${key[0]}"`).concat(systemColumns.map((el) => el[0])).join(',')})
46
+ ( ${filterData?.map((key) => `"${key[0]}"`).concat(systemColumnNames).join(',')})
49
47
 
50
48
  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(',')})
51
49
 
52
50
  returning *`;
53
51
 
54
- const res = await pg.query(insertQuery, [...filterData.map((el) => (typeof el[1] === 'object' && types[el[0]]?.includes?.('json') ? JSON.stringify(el[1]) : el[1]))]).catch(err => {
55
- logger.file('crud/insert', { error: err.toString(), stack: err.stack, table, id, referer, uid, data, q: insertQuery });
56
- throw new Error(err.toString());
57
- }) || {};
52
+ const res = await pg.query(insertQuery, [...filterData.map((el) => (typeof el[1] === 'object' && (!Array.isArray(el[1]) || typeof el[1]?.[0] === 'object') ? JSON.stringify(el[1]) : el[1]))]) || {};
58
53
 
59
54
  const table1 = pg.pk[table] ? table : table.replace(/"/g, '');
60
55
 
@@ -46,7 +46,7 @@ export default async function dataUpdate({
46
46
  const filterData = Object.keys(data)
47
47
  .filter((el) => (/* typeof data[el] === 'boolean' ? true : data[el] && */ names?.includes(el) && !['editor_date', 'editor_id'].includes(el)));
48
48
 
49
- const systemColumns = [['editor_date', 'now()'], uid ? ['editor_id', `'${uid.replace(/'/g, "''")}'`] : []].filter((el) => names.includes(el[0])).map((el) => `${el[0]} = ${el[1]}`).join(',');
49
+ const systemColumns = [['editor_date', 'now()', 'updated_at', 'now()'], uid ? ['editor_id', `'${uid.replace(/'/g, "''")}'`, 'updated_by', `'${uid.replace(/'/g, "''")}'`] : []].filter((el) => names.includes(el[0])).map((el) => `${el[0]} = ${el[1]}`).join(',');
50
50
 
51
51
  const filterValue = filterData.map((el) => {
52
52
  const { dataTypeID = 25 } = columns.find((col) => col?.name === el) || {};
@@ -21,7 +21,7 @@ function getExtraQuery(mainColumns, schema, table, pk) {
21
21
  }
22
22
 
23
23
  export default async function getFilterSQL({
24
- table, filter, pg = pgClients.client, search, filterList, query, custom, state, uid,
24
+ table, filter, pg = pgClients.client, search, filterList, query, custom, state, uid, objectId,
25
25
  }) {
26
26
  if (!table) return { error: 'param table is required', status: 400 };
27
27
 
@@ -119,6 +119,7 @@ export default async function getFilterSQL({
119
119
  fields,
120
120
  filterList: filterList1,
121
121
  uid,
122
+ objectId,
122
123
  });
123
124
 
124
125
  // filter
@@ -8,16 +8,16 @@
8
8
 
9
9
  import formatValue from './formatValue.js';
10
10
 
11
- function getQuery({
12
- pg, filter: filterStr, table, tableSQL, fields, filterList, uid,
11
+ function getFilterQuery({
12
+ pg, filter: filterStr, table, tableSQL, fields, filterList, uid, objectId,
13
13
  }) {
14
14
  // if (!filterStr) return null; // filter list API
15
15
 
16
16
  const mainOperators = ['=', '~', '>', '<'];
17
17
 
18
18
  const filterQueryArray = decodeURIComponent(filterStr?.replace?.(/%/g, '%25')?.replace?.(/%/g, '\\%')?.replace?.(/(^,)|(,$)/g, ''))?.replace?.(/'/g, "''")?.split?.(/[;|]/) || [];
19
- // default filter value form checkboxes, autocomplete or sql-defined only
20
- const filterDefaultQueryArray = filterList?.filter?.(el => el.name && !filterStr?.includes?.(`${el.name}=`) && el.default && (el.options || el.sql))?.map?.((el) => `${el.name}=${el.default}`) || [];
19
+ // default filter value form checkboxes, autocomplete or sql-defined only - if not called from card
20
+ const filterDefaultQueryArray = !objectId ? (filterList?.filter?.(el => el.name && !filterStr?.includes?.(`${el.name}=`) && el.default && (el.options || el.sql))?.map?.((el) => `${el.name}=${el.default}`) || []) : [];
21
21
 
22
22
  // concat default + request filters
23
23
  const arr = filterQueryArray.concat(filterDefaultQueryArray).filter(el => el);
@@ -71,4 +71,4 @@ function getQuery({
71
71
  return resultList;
72
72
  }
73
73
 
74
- export default getQuery;
74
+ export default getFilterQuery;
@@ -104,13 +104,14 @@ export default async function dataAPI(req, reply, called) {
104
104
  });
105
105
  }
106
106
 
107
- const isdefault = (loadTable?.filter_list || [])
107
+ const objectId = tokenData?.id || hookData?.id || params.id;
108
+ const isdefault = !objectId ? (loadTable?.filter_list || [])
108
109
  .concat(loadTable?.filterInline || [])
109
110
  .concat(loadTable?.filterCustom || [])
110
111
  .concat(loadTable?.filterState || [])
111
112
  .concat(loadTable?.filterList || [])
112
113
  .concat(loadTable?.filters || [])
113
- .find(el => el.default);
114
+ .find(el => el.default) : null;
114
115
 
115
116
  const checkFilter = [query.filter, query.search, query.state, query.custom, isdefault].filter((el) => el).length;
116
117
 
@@ -123,15 +124,16 @@ export default async function dataAPI(req, reply, called) {
123
124
  custom: query.custom,
124
125
  uid,
125
126
  json: 1,
127
+ objectId,
126
128
  }) : {};
127
129
 
128
130
  timeArr.push(Date.now());
129
131
 
130
- const keyQuery = query.key && (loadTable?.key || tokenData?.key) && !(tokenData?.id || hookData?.id || params.id) ? `${loadTable?.key || tokenData?.key}=$1` : null;
132
+ const keyQuery = query.key && (loadTable?.key || tokenData?.key) && !objectId ? `${loadTable?.key || tokenData?.key}=$1` : null;
131
133
 
132
134
  const limit = called ? (query.limit || 20) : Math.min(maxLimit, +(query.limit || 20));
133
135
 
134
- const offset = query.page && query.page > 0 && !(tokenData?.id || hookData?.id || params.id) ? ` offset ${(query.page - 1) * limit}` : '';
136
+ const offset = query.page && query.page > 0 && !objectId ? ` offset ${(query.page - 1) * limit}` : '';
135
137
  // id, query, filter
136
138
  const [orderColumn, orderDir] = (query.order || loadTable?.order || '').split(/[- ]/);
137
139
 
@@ -224,7 +226,7 @@ export default async function dataAPI(req, reply, called) {
224
226
  const { panels = [] } = index;
225
227
 
226
228
  const tokens = {};
227
- if (template && (tokenData?.id || hookData?.id || params.id)) {
229
+ if (template && objectId) {
228
230
 
229
231
  // tokens result
230
232
  if (index?.tokens && typeof index?.tokens === 'object' && !Array.isArray(index?.tokens)) {