@opengis/fastify-table 1.1.23 → 1.1.25

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.25 - 08.10.2024
4
+
5
+ - add migrations
6
+
3
7
  ## 1.1.23 - 03.10.2024
4
8
 
5
9
  - add user API and unit tests
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengis/fastify-table",
3
- "version": "1.1.23",
3
+ "version": "1.1.25",
4
4
  "type": "module",
5
5
  "description": "core-plugins",
6
6
  "main": "index.js",
@@ -0,0 +1,30 @@
1
+ import pg from 'pg';
2
+ import config from '../../config.js';
3
+ import pgClients from '../pgClients.js';
4
+ import init from './init.js';
5
+
6
+ async function getPGAsync(param) {
7
+ const {
8
+ user, password, host, port, db, database, name: origin, funcs,
9
+ } = typeof param === 'string'? { db:param } : param || {};
10
+ if (funcs?.config) Object.assign(config, { ...funcs.config }); // unit test
11
+ const name = origin || db || database || param || 'client';
12
+
13
+ if (pgClients[name]) return pgClients[name];
14
+
15
+ const dbConfig = {
16
+ user: user || config.pg?.user,
17
+ password: password || config.pg?.password,
18
+ host: host || config.pg?.host,
19
+ port: port || config.pg?.port,
20
+ database: db || database || config.pg?.db || config.pg?.database,
21
+ };
22
+
23
+ pgClients[name] = new pg.Pool(dbConfig);
24
+
25
+ await init(pgClients[name]);
26
+
27
+ return pgClients[name];
28
+ }
29
+
30
+ export default getPGAsync;
@@ -0,0 +1,39 @@
1
+ create schema if not exists admin;
2
+
3
+ CREATE TABLE if not exists admin.cls();
4
+ ALTER TABLE admin.cls ADD COLUMN IF NOT EXISTS clsid text;
5
+ ALTER TABLE admin.cls DROP CONSTRAINT IF EXISTS admin_cls_pkey;
6
+ ALTER TABLE admin.cls DROP CONSTRAINT IF EXISTS admin_cls_unique;
7
+
8
+ ALTER TABLE admin.cls ALTER COLUMN clsid SET NOT NULL;
9
+ ALTER TABLE admin.cls ALTER COLUMN clsid SET DEFAULT next_id();
10
+ ALTER TABLE admin.cls ADD COLUMN IF NOT EXISTS name text;
11
+ ALTER TABLE admin.cls ADD COLUMN IF NOT EXISTS data text;
12
+ ALTER TABLE admin.cls ADD COLUMN IF NOT EXISTS type text;
13
+ ALTER TABLE admin.cls ADD COLUMN IF NOT EXISTS code text;
14
+ ALTER TABLE admin.cls ADD COLUMN IF NOT EXISTS parent text;
15
+ ALTER TABLE admin.cls ADD COLUMN IF NOT EXISTS ua text;
16
+ ALTER TABLE admin.cls ADD COLUMN IF NOT EXISTS en text;
17
+ ALTER TABLE admin.cls ADD COLUMN IF NOT EXISTS module text;
18
+ ALTER TABLE admin.cls ADD COLUMN IF NOT EXISTS files json;
19
+ ALTER TABLE admin.cls ADD COLUMN IF NOT EXISTS cdate timestamp without time zone;
20
+ ALTER TABLE admin.cls ALTER COLUMN cdate SET DEFAULT (now())::timestamp without time zone;
21
+ ALTER TABLE admin.cls ADD COLUMN IF NOT EXISTS editor_id text;
22
+ ALTER TABLE admin.cls ADD COLUMN IF NOT EXISTS editor_date timestamp without time zone;
23
+ ALTER TABLE admin.cls ADD COLUMN IF NOT EXISTS uid text;
24
+ ALTER TABLE admin.cls ALTER COLUMN uid SET NOT NULL;
25
+ ALTER TABLE admin.cls ALTER COLUMN uid SET DEFAULT '1'::text;
26
+ ALTER TABLE admin.cls ADD COLUMN IF NOT EXISTS icon text;
27
+ ALTER TABLE admin.cls ADD COLUMN IF NOT EXISTS color text;
28
+
29
+ ALTER TABLE admin.cls ADD CONSTRAINT admin_cls_pkey PRIMARY KEY (clsid);
30
+ ALTER TABLE admin.cls ADD CONSTRAINT admin_cls_unique UNIQUE (code, parent);
31
+
32
+ COMMENT ON COLUMN admin.cls.name IS 'Назва';
33
+ COMMENT ON COLUMN admin.cls.type IS 'Тип';
34
+ COMMENT ON COLUMN admin.cls.data IS 'SQL';
35
+ COMMENT ON COLUMN admin.cls.code IS 'Код';
36
+ COMMENT ON COLUMN admin.cls.parent IS 'Назва батьківського об''єкту';
37
+ COMMENT ON COLUMN admin.cls.module IS 'Модуль';
38
+ COMMENT ON COLUMN admin.cls.icon IS 'Іконка';
39
+ COMMENT ON COLUMN admin.cls.color IS 'Колір';
@@ -55,4 +55,67 @@ ALTER TABLE admin.user_properties ADD COLUMN IF NOT EXISTS files json;
55
55
  ALTER TABLE admin.user_properties ADD CONSTRAINT admin_user_properties_property_id_pkey PRIMARY KEY(property_id);
56
56
  ALTER TABLE admin.user_properties ADD CONSTRAINT user_properties_key_uid_unique UNIQUE (property_key,property_entity,uid);
57
57
 
58
- COMMENT ON TABLE admin.user_properties IS 'Налаштування користувача';
58
+ COMMENT ON TABLE admin.user_properties IS 'Налаштування користувача';
59
+
60
+ -- DROP TABLE admin.table_properties;
61
+ CREATE TABLE IF NOT EXISTS admin.table_properties();
62
+ ALTER TABLE admin.table_properties DROP CONSTRAINT IF EXISTS admin_table_properties_property_id_pkey cascade;
63
+ alter table admin.table_properties drop constraint if exists table_properties_key_type_entity_uid_unique;
64
+ ALTER TABLE admin.table_properties ADD COLUMN IF NOT EXISTS property_id text NOT NULL DEFAULT next_id();
65
+
66
+ ALTER TABLE admin.table_properties ADD COLUMN IF NOT EXISTS property_key text;
67
+ ALTER TABLE admin.table_properties ADD COLUMN IF NOT EXISTS property_type text;
68
+ ALTER TABLE admin.table_properties ADD COLUMN IF NOT EXISTS property_entity text;
69
+ ALTER TABLE admin.table_properties ADD COLUMN IF NOT EXISTS property_title text;
70
+ ALTER TABLE admin.table_properties ADD COLUMN IF NOT EXISTS property_format text;
71
+ ALTER TABLE admin.table_properties ADD COLUMN IF NOT EXISTS property_data text;
72
+
73
+ ALTER TABLE admin.table_properties ADD COLUMN IF NOT EXISTS uid text NOT NULL DEFAULT '1'::text;
74
+ ALTER TABLE admin.table_properties ADD COLUMN IF NOT EXISTS editor_id text;
75
+ ALTER TABLE admin.table_properties ADD COLUMN IF NOT EXISTS editor_date timestamp without time zone;
76
+ ALTER TABLE admin.table_properties ADD COLUMN IF NOT EXISTS cdate timestamp without time zone DEFAULT now();
77
+ ALTER TABLE admin.table_properties ADD COLUMN IF NOT EXISTS files json;
78
+
79
+ ALTER TABLE admin.table_properties ADD CONSTRAINT admin_table_properties_property_id_pkey PRIMARY KEY(property_id);
80
+ ALTER TABLE admin.table_properties ADD CONSTRAINT table_properties_key_type_entity_uid_unique UNIQUE (property_key,property_type,property_entity,uid);
81
+
82
+ COMMENT ON TABLE admin.table_properties IS 'Налаштування таблиць користувача';
83
+ COMMENT ON COLUMN admin.table_properties.property_key IS 'Ключ';
84
+ COMMENT ON COLUMN admin.table_properties.property_type IS 'Тип (колонка/фільтр)';
85
+ COMMENT ON COLUMN admin.table_properties.property_entity IS 'Сутність';
86
+ COMMENT ON COLUMN admin.table_properties.property_title IS 'Назва';
87
+ COMMENT ON COLUMN admin.table_properties.property_format IS 'Формат';
88
+ COMMENT ON COLUMN admin.table_properties.property_data IS 'Класифікатор';
89
+
90
+ CREATE TABLE if not exists setting.extra_data();
91
+ ALTER TABLE setting.extra_data DROP CONSTRAINT IF EXISTS setting_extra_data_pkey;
92
+ ALTER TABLE setting.extra_data DROP CONSTRAINT IF EXISTS setting_extra_data_property_id_fkey;
93
+ ALTER TABLE setting.extra_data ADD COLUMN IF NOT EXISTS extra_data_id text;
94
+ ALTER TABLE setting.extra_data ALTER COLUMN extra_data_id SET NOT NULL;
95
+ ALTER TABLE setting.extra_data ALTER COLUMN extra_data_id SET DEFAULT next_id();
96
+
97
+ ALTER TABLE setting.extra_data ADD COLUMN IF NOT EXISTS property_id text;
98
+ ALTER TABLE setting.extra_data ADD COLUMN IF NOT EXISTS property_entity text;
99
+ ALTER TABLE setting.extra_data ADD COLUMN IF NOT EXISTS object_id text;
100
+ ALTER TABLE setting.extra_data ADD COLUMN IF NOT EXISTS value_json json;
101
+ ALTER TABLE setting.extra_data ADD COLUMN IF NOT EXISTS uid text;
102
+ ALTER TABLE setting.extra_data ALTER COLUMN uid SET DEFAULT '1'::text;
103
+ ALTER TABLE setting.extra_data ADD COLUMN IF NOT EXISTS cdate timestamp without time zone;
104
+ ALTER TABLE setting.extra_data ALTER COLUMN cdate SET DEFAULT date_trunc('seconds'::text, now());
105
+ ALTER TABLE setting.extra_data ADD COLUMN IF NOT EXISTS editor_id text;
106
+ ALTER TABLE setting.extra_data ADD COLUMN IF NOT EXISTS editor_date timestamp without time zone;
107
+ ALTER TABLE setting.extra_data ADD COLUMN IF NOT EXISTS files json;
108
+ ALTER TABLE setting.extra_data ADD CONSTRAINT setting_extra_data_pkey PRIMARY KEY (extra_data_id);
109
+ ALTER TABLE setting.extra_data ADD CONSTRAINT setting_extra_data_property_id_fkey FOREIGN KEY (property_id) REFERENCES admin.table_properties (property_id) MATCH SIMPLE;
110
+
111
+ COMMENT ON TABLE setting.extra_data IS 'Значення користувацьких полів';
112
+ COMMENT ON COLUMN setting.extra_data.property_id IS 'ID поля користувача';
113
+ COMMENT ON COLUMN setting.extra_data.property_entity IS 'Таблиця';
114
+ COMMENT ON COLUMN setting.extra_data.object_id IS 'Ідентифікатор об''єкту';
115
+ COMMENT ON COLUMN setting.extra_data.value_json IS 'Значення';
116
+ COMMENT ON COLUMN setting.extra_data.uid IS 'ID користувача';
117
+
118
+ CREATE INDEX IF NOT EXISTS setting_extra_data_cdate_btree_idx ON setting.extra_data USING btree (cdate);
119
+ CREATE INDEX IF NOT EXISTS setting_extra_data_property_id_btree_idx ON setting.extra_data USING btree (property_id COLLATE pg_catalog."default");
120
+ CREATE INDEX IF NOT EXISTS setting_extra_data_property_entity_btree_idx ON setting.extra_data USING btree (property_entity COLLATE pg_catalog."default");
121
+ CREATE INDEX IF NOT EXISTS setting_extra_data_object_id_btree_idx ON setting.extra_data USING btree (object_id COLLATE pg_catalog."default");
@@ -15,14 +15,14 @@ export default async function userCls(req) {
15
15
  case when type='json' then (
16
16
  ${params?.id
17
17
  ? `(with recursive rows as (
18
- select user_clsid, name, code, icon, color, parent
18
+ select user_clsid, code as id, name as text, icon, color, parent
19
19
  from admin.user_cls a
20
20
  where name=u.name
21
21
  union all
22
- select a.user_clsid, a.name, a.code, a.icon, a.color, a.parent
22
+ select a.user_clsid, a.code, a.name, a.icon, a.color, a.parent
23
23
  from admin.user_cls a
24
- join rows b on a.parent=b.name
25
- ) select json_agg(row_to_json(q)) from rows q where name<>u.name
24
+ join rows b on a.parent=b.text
25
+ ) select json_agg(row_to_json(q)) from rows q where text<>u.name
26
26
  )`
27
27
  : 'select count(*)::int from admin.user_cls where parent=u.name'} ) else null end as children,
28
28
  case when type='sql' then data else null end as sql from admin.user_cls u
package/utils.js CHANGED
@@ -9,6 +9,7 @@ import metaFormat from './table/funcs/metaFormat/index.js';
9
9
  import autoIndex from './pg/funcs/autoIndex.js';
10
10
 
11
11
  import getPG from './pg/funcs/getPG.js';
12
+ import getPGAsync from './pg/funcs/getPGAsync.js';
12
13
  import initPG from './pg/funcs/init.js';
13
14
  import pgClients from './pg/pgClients.js';
14
15
  import getRedis from './redis/funcs/getRedis.js';
@@ -41,6 +42,7 @@ export {
41
42
  autoIndex,
42
43
  addTemplateDir,
43
44
  getPG,
45
+ getPGAsync,
44
46
  initPG,
45
47
  pgClients,
46
48
  dataInsert,