@opengis/fastify-table 1.1.27 → 1.1.29

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/Changelog.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # fastify-table
2
2
 
3
+ ## 1.1.29 - 09.10.2024
4
+
5
+ - add after crud hook
6
+
3
7
  ## 1.1.27 - 08.10.2024
4
8
 
5
9
  - add migrations
@@ -1,8 +1,6 @@
1
- import dataInsert from '../funcs/dataInsert.js';
2
- import getToken from '../funcs/getToken.js';
3
- import checkXSS from './utils/checkXSS.js';
4
- import getTemplate from '../../table/controllers/utils/getTemplate.js';
5
- import getAccess from '../funcs/getAccess.js';
1
+ import {
2
+ applyHook, getAccess, getTemplate, checkXSS, getToken, dataInsert,
3
+ } from '../../utils.js';
6
4
 
7
5
  export default async function insert(req) {
8
6
  const { actions = [] } = await getAccess(req, req.params.table) || {};
@@ -42,6 +40,9 @@ export default async function insert(req) {
42
40
  table: add || table, data: req.body, uid,
43
41
  });
44
42
 
43
+ // table_properties
44
+ await applyHook('afterInsert', { req, res });
45
+ // form DataTable
45
46
  const extraKeys = Object.keys(formData)?.filter((key) => formData?.[key]?.type === 'DataTable' && formData?.[key]?.table && formData?.[key]?.parent_id && req.body[key].length);
46
47
  if (extraKeys?.length) {
47
48
  res.extra = {};
@@ -1,10 +1,6 @@
1
- import dataUpdate from '../funcs/dataUpdate.js';
2
- import dataInsert from '../funcs/dataInsert.js';
3
- import pgClients from '../../pg/pgClients.js';
4
- import getToken from '../funcs/getToken.js';
5
- import checkXSS from './utils/checkXSS.js';
6
- import getTemplate from '../../table/controllers/utils/getTemplate.js';
7
- import getAccess from '../funcs/getAccess.js';
1
+ import {
2
+ pgClients, applyHook, getAccess, getTemplate, checkXSS, getToken, dataInsert, dataUpdate,
3
+ } from '../../utils.js';
8
4
 
9
5
  export default async function update(req) {
10
6
  const { actions = [], scope, my } = await getAccess(req, req.params.table, req.params.id) || {};
@@ -42,6 +38,10 @@ export default async function update(req) {
42
38
  table: tokenData?.table || table, id: tokenData?.id || id, data: req.body, uid,
43
39
  });
44
40
 
41
+ // table_properties
42
+ await applyHook('afterUpdate', { req, res });
43
+
44
+ // form DataTable
45
45
  const extraKeys = Object.keys(formData)?.filter((key) => formData?.[key]?.type === 'DataTable' && formData?.[key]?.table && formData?.[key]?.parent_id && req.body[key].length);
46
46
  if (extraKeys?.length) {
47
47
  res.extra = {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengis/fastify-table",
3
- "version": "1.1.27",
3
+ "version": "1.1.29",
4
4
  "type": "module",
5
5
  "description": "core-plugins",
6
6
  "main": "index.js",
@@ -1,4 +1,5 @@
1
1
  create schema if not exists admin;
2
+ create schema if not exists setting;
2
3
 
3
4
  -- DROP TABLE admin.properties;
4
5
  CREATE TABLE IF NOT EXISTS admin.properties();
@@ -99,7 +100,8 @@ ALTER TABLE setting.extra_data ADD COLUMN IF NOT EXISTS property_id text;
99
100
  ALTER TABLE setting.extra_data ADD COLUMN IF NOT EXISTS property_key text;
100
101
  ALTER TABLE setting.extra_data ADD COLUMN IF NOT EXISTS property_entity text;
101
102
  ALTER TABLE setting.extra_data ADD COLUMN IF NOT EXISTS object_id text;
102
- ALTER TABLE setting.extra_data ADD COLUMN IF NOT EXISTS value_json json;
103
+ ALTER TABLE setting.extra_data ADD COLUMN IF NOT EXISTS value_text text;
104
+ ALTER TABLE setting.extra_data ADD COLUMN IF NOT EXISTS value_date timestamp without time zone;
103
105
  ALTER TABLE setting.extra_data ADD COLUMN IF NOT EXISTS uid text;
104
106
  ALTER TABLE setting.extra_data ALTER COLUMN uid SET DEFAULT '1'::text;
105
107
  ALTER TABLE setting.extra_data ADD COLUMN IF NOT EXISTS cdate timestamp without time zone;
@@ -116,7 +118,8 @@ COMMENT ON COLUMN setting.extra_data.property_id IS 'ID поля користу
116
118
  COMMENT ON COLUMN setting.extra_data.property_key IS 'Назва колонки';
117
119
  COMMENT ON COLUMN setting.extra_data.property_entity IS 'Таблиця';
118
120
  COMMENT ON COLUMN setting.extra_data.object_id IS 'Ідентифікатор об''єкту';
119
- COMMENT ON COLUMN setting.extra_data.value_json IS 'Значення';
121
+ COMMENT ON COLUMN setting.extra_data.value_text IS 'Значення';
122
+ COMMENT ON COLUMN setting.extra_data.value_date IS 'Дата';
120
123
  COMMENT ON COLUMN setting.extra_data.uid IS 'ID користувача';
121
124
 
122
125
  CREATE INDEX IF NOT EXISTS setting_extra_data_cdate_btree_idx ON setting.extra_data USING btree (cdate);
@@ -18,6 +18,7 @@ ALTER TABLE admin.users add column if not exists enabled boolean;
18
18
  ALTER TABLE admin.users add column if not exists user_personal_code text;
19
19
  ALTER TABLE admin.users add column if not exists last_activity_date timestamp without time zone;
20
20
  ALTER TABLE admin.users add column if not exists user_type text DEFAULT 'regular'::text;
21
+ ALTER TABLE admin.users add column if not exists user_rnokpp text;
21
22
  ALTER TABLE admin.users add column if not exists salt text;
22
23
  ALTER TABLE admin.users add column if not exists cdate timestamp without time zone DEFAULT date_trunc('seconds'::text, now());
23
24
  ALTER TABLE admin.users add column if not exists editor_id text;
@@ -19,7 +19,7 @@ function formatDateISOString(date) {
19
19
  }
20
20
 
21
21
  function formatValue({
22
- clsList, filterType, filter, name, value, operator = '=', fieldType = 'text', uid = 1, optimize,
22
+ filterType, filter, name, value, operator = '=', fieldType = 'text', uid = 1, optimize,
23
23
  }) {
24
24
  if (!name || !value) return {};
25
25
 
@@ -105,7 +105,7 @@ function formatValue({
105
105
  return { op: operator, query };
106
106
  }
107
107
 
108
- if (operator === '=' && filterType !== 'text') {
108
+ if (operator === '=' && filterType !== 'text' && !filter?.data) {
109
109
  const query = {
110
110
  null: `${name} is null`,
111
111
  notnull: `${name} is not null`,
@@ -114,9 +114,12 @@ function formatValue({
114
114
  }
115
115
 
116
116
  if (['~', '='].includes(operator)) {
117
- const query = clsList[filter?.data]
118
- ? `${filter?.name} in ( ( with q(id,name) as (${clsList?.[filter?.data]}) select id from q where name ilike '%${value}%') )` // filter with cls
119
- : `${name}::text ilike '%${value}%'`; // simple filter
117
+ const operator1 = (filterType === 'text' && (filter?.id || filter?.name) && operator === '=' ? '~' : operator);
118
+ const match = operator1 === '=' ? `='${value}'` : `ilike '%${value}%'`;
119
+ const query = filter?.data && filter?.sql
120
+ ? `${filter?.name || filter?.id} in ( ( with q(id,name) as (${filter?.sql}) select id from q where name::text ${match}) )` // filter with cls
121
+ : `${name}::text ${match}`; // simple filter
122
+ // console.log(query);
120
123
  return { op: 'ilike', query };
121
124
  }
122
125
 
@@ -5,8 +5,8 @@ export default function obj2db(data, nonexistCol) {
5
5
  || !Object.keys(data || {}).length
6
6
  ) return { error: 'invalid data type' };
7
7
 
8
- const existColumns = Object.keys(data)?.filter((key) => !nonexistCol.includes(key));
9
- const columns = existColumns?.filter((col) => data[col] || data?.[col] === 0);
8
+ const columns = Object.keys(data)?.filter((key) => !nonexistCol.includes(key));
9
+ // const columns = existColumns?.filter((col) => data[col] || data?.[col] === 0);
10
10
  const args = columns?.map((col) => data[col]);
11
11
 
12
12
  return { columns, args, error: !columns?.length ? 'nothing to process' : undefined };