@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 +1 -1
- package/server/plugins/crud/funcs/dataInsert.js +7 -12
- package/server/plugins/crud/funcs/dataUpdate.js +1 -1
- package/server/plugins/table/funcs/getFilterSQL/index.js +2 -1
- package/server/plugins/table/funcs/getFilterSQL/util/getFilterQuery.js +5 -5
- package/server/routes/table/controllers/data.js +7 -5
package/package.json
CHANGED
|
@@ -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
|
-
|
|
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) => !
|
|
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(
|
|
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' &&
|
|
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
|
|
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
|
|
74
|
+
export default getFilterQuery;
|
|
@@ -104,13 +104,14 @@ export default async function dataAPI(req, reply, called) {
|
|
|
104
104
|
});
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
-
const
|
|
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) && !
|
|
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 && !
|
|
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 &&
|
|
229
|
+
if (template && objectId) {
|
|
228
230
|
|
|
229
231
|
// tokens result
|
|
230
232
|
if (index?.tokens && typeof index?.tokens === 'object' && !Array.isArray(index?.tokens)) {
|