@opengis/fastify-table 1.1.45 → 1.1.47

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.
Files changed (129) hide show
  1. package/Changelog.md +1 -1
  2. package/README.md +26 -26
  3. package/config.js +10 -10
  4. package/cron/controllers/cronApi.js +22 -22
  5. package/cron/controllers/utils/cronList.js +1 -1
  6. package/cron/index.js +10 -10
  7. package/crud/controllers/deleteCrud.js +9 -4
  8. package/crud/controllers/insert.js +9 -6
  9. package/crud/controllers/update.js +13 -10
  10. package/crud/controllers/utils/checkXSS.js +3 -2
  11. package/crud/controllers/utils/xssInjection.js +72 -72
  12. package/crud/funcs/getAccess.js +14 -13
  13. package/crud/funcs/getToken.js +27 -27
  14. package/crud/funcs/isFileExists.js +13 -13
  15. package/crud/funcs/setToken.js +53 -53
  16. package/docs/.vitepress/abbr.mjs +26 -0
  17. package/docs/.vitepress/config.mjs +127 -0
  18. package/docs/.vitepress/navigation.mjs +82 -0
  19. package/docs/.vitepress/theme/Layout.vue +17 -0
  20. package/docs/.vitepress/theme/components/NavigationLinks.vue +102 -0
  21. package/docs/.vitepress/theme/components/Panzoom.vue +169 -0
  22. package/docs/.vitepress/theme/index.mjs +15 -0
  23. package/docs/.vitepress/theme/style.scss +163 -0
  24. package/docs/abbr.json +4 -0
  25. package/docs/api/cron/cronApi.md +56 -0
  26. package/docs/api/crud/deleteCrud.md +58 -0
  27. package/docs/api/crud/insert.md +82 -0
  28. package/docs/api/crud/update.md +85 -0
  29. package/docs/api/index.md +47 -0
  30. package/docs/api/notification/testEmail.md +91 -0
  31. package/docs/api/table/card.md +73 -0
  32. package/docs/api/table/data.md +134 -0
  33. package/docs/api/table/export.md +60 -0
  34. package/docs/api/table/filter.md +104 -0
  35. package/docs/api/table/form.md +126 -0
  36. package/docs/api/table/search.md +123 -0
  37. package/docs/api/table/suggest.md +156 -0
  38. package/docs/api/table/table.md +107 -0
  39. package/docs/api/user/user.cls.id.md +77 -0
  40. package/docs/api/user/user.cls.md +49 -0
  41. package/docs/api/user/user.cls.post.md +62 -0
  42. package/docs/api/user/user.info.md +37 -0
  43. package/docs/api/utils/logger.file.md +61 -0
  44. package/docs/api/utils/next.id.md +34 -0
  45. package/docs/api/utils/properties.add.md +127 -0
  46. package/docs/api/utils/properties.get.md +73 -0
  47. package/docs/api/utils/status.monitor.md +36 -0
  48. package/docs/api/widget/widget.del.md +76 -0
  49. package/docs/api/widget/widget.get.md +233 -0
  50. package/docs/api/widget/widget.set.md +88 -0
  51. package/docs/db/admin.md +947 -0
  52. package/docs/db/crm.md +564 -0
  53. package/docs/db/index.md +9 -0
  54. package/docs/db/log.md +204 -0
  55. package/docs/hook/card/afterCard.md +20 -0
  56. package/docs/hook/card/preCard.md +25 -0
  57. package/docs/hook/data/afterData.md +26 -0
  58. package/docs/hook/data/preData.md +26 -0
  59. package/docs/hook/deleteCrud/afterDelete.md +21 -0
  60. package/docs/hook/deleteCrud/preDelete.md +26 -0
  61. package/docs/hook/form/afterForm.md +19 -0
  62. package/docs/hook/form/preForm.md +26 -0
  63. package/docs/hook/getTemplate/afterTemplate.md +24 -0
  64. package/docs/hook/getTemplate/preTemplate.md +29 -0
  65. package/docs/hook/index.md +45 -0
  66. package/docs/hook/insert/afterInsert.md +41 -0
  67. package/docs/hook/insert/preInsert.md +25 -0
  68. package/docs/hook/table/afterTable.md +20 -0
  69. package/docs/hook/table/preTable.md +25 -0
  70. package/docs/hook/update/afterUpdate.md +41 -0
  71. package/docs/hook/update/preUpdate.md +25 -0
  72. package/docs/index.md +42 -0
  73. package/docs/public/fastify-dark.svg +4 -0
  74. package/docs/public/fastify.svg +1 -0
  75. package/docs/public/logo-short-dark.svg +12 -0
  76. package/docs/public/logo-short.svg +11 -0
  77. package/docs/public/logo.svg +19 -0
  78. package/docs/readme/index.md +121 -0
  79. package/docs/templates/card.md +83 -0
  80. package/docs/templates/cls.md +29 -0
  81. package/docs/templates/filters.md +91 -0
  82. package/docs/templates/forms.md +139 -0
  83. package/docs/templates/image.png +0 -0
  84. package/docs/templates/index.md +28 -0
  85. package/docs/templates/select.md +90 -0
  86. package/docs/templates/table.md +162 -0
  87. package/docs/utils/cron/addCron.md +29 -0
  88. package/docs/utils/crud/dataInsert.md +52 -0
  89. package/docs/utils/crud/dataUpdate.md +53 -0
  90. package/docs/utils/crud/getOpt.md +34 -0
  91. package/docs/utils/crud/isFileExists.md +38 -0
  92. package/docs/utils/crud/setOpt.md +38 -0
  93. package/docs/utils/hook/addHook.md +74 -0
  94. package/docs/utils/hook/applyHook.md +64 -0
  95. package/docs/utils/index.md +48 -0
  96. package/docs/utils/notification/addNotification.md +28 -0
  97. package/docs/utils/notification/notification.md +41 -0
  98. package/docs/utils/pg/autoIndex.md +22 -0
  99. package/docs/utils/pg/getMeta.md +59 -0
  100. package/docs/utils/pg/getPG.md +34 -0
  101. package/docs/utils/pg/init.md +30 -0
  102. package/docs/utils/pg/pg.md +70 -0
  103. package/docs/utils/redis/getRedis.md +36 -0
  104. package/docs/utils/redis/rclient.md +74 -0
  105. package/docs/utils/table/getForm.md +69 -0
  106. package/docs/utils/table/getMeta.md +56 -0
  107. package/docs/utils/table/getSelect.md +39 -0
  108. package/docs/utils/table/getSelectMeta.md +47 -0
  109. package/docs/utils/table/getTable.md +78 -0
  110. package/logger/createFileStream.js +1 -1
  111. package/package.json +15 -3
  112. package/redis/funcs/getRedis.js +23 -23
  113. package/server/migrations/log.sql +80 -80
  114. package/table/controllers/data.js +31 -23
  115. package/table/controllers/table.js +26 -22
  116. package/table/index.js +3 -50
  117. package/table/schema.js +54 -0
  118. package/test/api/crud.xss.test.js +38 -22
  119. package/test/config.example +18 -18
  120. package/test/funcs/pg.test.js +34 -34
  121. package/test/funcs/redis.test.js +19 -19
  122. package/test/templates/cls/test.json +9 -9
  123. package/test/templates/form/cp_building.form.json +32 -32
  124. package/test/templates/select/account_id.json +3 -3
  125. package/test/templates/select/storage.data.json +2 -2
  126. package/test/templates/table/gis.dataset.table.json +20 -20
  127. package/util/controllers/next.id.js +4 -4
  128. package/util/controllers/properties.get.js +19 -19
  129. package/util/index.js +23 -23
package/docs/db/log.md ADDED
@@ -0,0 +1,204 @@
1
+
2
+
3
+ # log
4
+
5
+ ## Схема
6
+
7
+ ``` mermaid
8
+ erDiagram
9
+ "table_changes - Логи подій змін в БД" {
10
+ entity_type text "Таблиця, до якої вносяться зміни"
11
+ entity_id text "ID строки, до якої вносяться зміни"
12
+ change_type text "Тип події (insert / update / delete)"
13
+ change_key text "-"
14
+ change_date date "Дата внесення змін до БД"
15
+ uid text "ідентифікатор автора запису в БД"
16
+ cdate timestamp_without_time_zone "Дата створення запису в БД"
17
+ editor_id text "Ідентифікатор автора, який останій вніс зміни в запис"
18
+ editor_date timestamp_without_time_zone "Час останії зміни в записі"
19
+ change_id text PK "-"
20
+ change_user_id text "Ініціатор внесення змін"
21
+ }
22
+ "table_changes_data - Логи змін в таблицях БД" {
23
+ change_data_id text PK "-"
24
+ change_id text FK "ID події зміни в БД"
25
+ entity_key text "Колонка таблиці, до якої вносяться зміни"
26
+ value_old text "Старе значення"
27
+ value_new text "Нове значення"
28
+ uid text "ідентифікатор автора запису в БД"
29
+ cdate timestamp_without_time_zone "Дата створення запису в БД"
30
+ editor_id text "Ідентифікатор автора, який останій вніс зміни в запис"
31
+ editor_date timestamp_without_time_zone "Час останії зміни в записі"
32
+ }
33
+ "user_auth - Логи авторизації" {
34
+ user_auth_id text PK "-"
35
+ user_id text "ID користувача"
36
+ user_auth_date timestamp_without_time_zone "-"
37
+ user_auth_type text "-"
38
+ uid text "ідентифікатор автора запису в БД"
39
+ cdate timestamp_without_time_zone "Дата створення запису в БД"
40
+ editor_id text "Ідентифікатор автора, який останій вніс зміни в запис"
41
+ editor_date timestamp_without_time_zone "Час останії зміни в записі"
42
+ auth_date timestamp_without_time_zone "Дата авторизації"
43
+ auth_type text "Тип авторизації"
44
+ }
45
+ "log.table_changes_data - " ||--|{ "log.table_changes - " : ""
46
+ ```
47
+
48
+ **Ключі**
49
+
50
+ ``` mermaid
51
+ erDiagram
52
+ "table_changes - Логи подій змін в БД" {
53
+ change_id PRIMARY_KEY
54
+ }
55
+ "table_changes_data - Логи змін в таблицях БД" {
56
+ change_data_id PRIMARY_KEY
57
+ change_id FOREIGN_KEY
58
+ }
59
+ "user_auth - Логи авторизації" {
60
+ user_auth_id PRIMARY_KEY
61
+ }
62
+ "log.table_changes_data - " ||--|{ "log.table_changes - " : ""
63
+ ```
64
+
65
+
66
+
67
+ ## log.table_changes
68
+
69
+ Логи подій змін в БД
70
+
71
+ :::tabs
72
+
73
+ ==table
74
+
75
+ | Назва колонки | Тип | Ключ | Опис |
76
+ | ---------------------- | ------------------------- | --- | ---------- |
77
+ | entity_type | `text` | | Таблиця, до якої вносяться зміни |
78
+ | entity_id | `text` | | ID строки, до якої вносяться зміни |
79
+ | change_type | `text` | | Тип події (insert / update / delete) |
80
+ | change_key | `text` | | - |
81
+ | change_date | `date` | | Дата внесення змін до БД |
82
+ | uid | `text` | | ідентифікатор автора запису в БД |
83
+ | cdate | `timestamp without time zone` | | Дата створення запису в БД |
84
+ | editor_id | `text` | | Ідентифікатор автора, який останій вніс зміни в запис |
85
+ | editor_date | `timestamp without time zone` | | Час останії зміни в записі |
86
+ | change_id | `text` | PK | - |
87
+ | change_user_id | `text` | | Ініціатор внесення змін |
88
+
89
+ ==sql
90
+
91
+ ```sql
92
+
93
+ CREATE TABLE log.table_changes
94
+ (
95
+ entity_type text , -- Таблиця, до якої вносяться зміни
96
+ entity_id text , -- ID строки, до якої вносяться зміни
97
+ change_type text , -- Тип події (insert / update / delete)
98
+ change_key text , -- -
99
+ change_date date , -- Дата внесення змін до БД
100
+ uid text , -- ідентифікатор автора запису в БД
101
+ cdate timestamp without time zone DEFAULT (now())::timestamp without time zone, -- Дата створення запису в БД
102
+ editor_id text , -- Ідентифікатор автора, який останій вніс зміни в запис
103
+ editor_date timestamp without time zone , -- Час останії зміни в записі
104
+ change_id text DEFAULT next_id(), -- -
105
+ change_user_id text -- Ініціатор внесення змін
106
+ ,
107
+ CONSTRAINT log_table_changes_pkey PRIMARY KEY (change_id)
108
+ );
109
+
110
+ ```
111
+
112
+ :::
113
+
114
+
115
+ ## log.table_changes_data
116
+
117
+ Логи змін в таблицях БД
118
+
119
+ :::tabs
120
+
121
+ ==table
122
+
123
+ | Назва колонки | Тип | Ключ | Опис |
124
+ | ---------------------- | ------------------------- | --- | ---------- |
125
+ | change_data_id | `text` | PK | - |
126
+ | change_id | `text` | FK | ID події зміни в БД |
127
+ | entity_key | `text` | | Колонка таблиці, до якої вносяться зміни |
128
+ | value_old | `text` | | Старе значення |
129
+ | value_new | `text` | | Нове значення |
130
+ | uid | `text` | | ідентифікатор автора запису в БД |
131
+ | cdate | `timestamp without time zone` | | Дата створення запису в БД |
132
+ | editor_id | `text` | | Ідентифікатор автора, який останій вніс зміни в запис |
133
+ | editor_date | `timestamp without time zone` | | Час останії зміни в записі |
134
+
135
+ ==sql
136
+
137
+ ```sql
138
+
139
+ CREATE TABLE log.table_changes_data
140
+ (
141
+ change_data_id text DEFAULT next_id(), -- -
142
+ change_id text , -- ID події зміни в БД
143
+ entity_key text , -- Колонка таблиці, до якої вносяться зміни
144
+ value_old text , -- Старе значення
145
+ value_new text , -- Нове значення
146
+ uid text , -- ідентифікатор автора запису в БД
147
+ cdate timestamp without time zone DEFAULT (now())::timestamp without time zone, -- Дата створення запису в БД
148
+ editor_id text , -- Ідентифікатор автора, який останій вніс зміни в запис
149
+ editor_date timestamp without time zone -- Час останії зміни в записі
150
+ ,
151
+ CONSTRAINT log_table_changes_data_change_id_fkey FOREIGN KEY (change_id) REFERENCES log.table_changes (change_id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION,
152
+ CONSTRAINT log_table_changes_data_pkey PRIMARY KEY (change_data_id)
153
+ );
154
+
155
+ ```
156
+
157
+ :::
158
+
159
+
160
+ ## log.user_auth
161
+
162
+ Логи авторизації
163
+
164
+ :::tabs
165
+
166
+ ==table
167
+
168
+ | Назва колонки | Тип | Ключ | Опис |
169
+ | ---------------------- | ------------------------- | --- | ---------- |
170
+ | user_auth_id | `text` | PK | - |
171
+ | user_id | `text` | | ID користувача |
172
+ | user_auth_date | `timestamp without time zone` | | - |
173
+ | user_auth_type | `text` | | - |
174
+ | uid | `text` | | ідентифікатор автора запису в БД |
175
+ | cdate | `timestamp without time zone` | | Дата створення запису в БД |
176
+ | editor_id | `text` | | Ідентифікатор автора, який останій вніс зміни в запис |
177
+ | editor_date | `timestamp without time zone` | | Час останії зміни в записі |
178
+ | auth_date | `timestamp without time zone` | | Дата авторизації |
179
+ | auth_type | `text` | | Тип авторизації |
180
+
181
+ ==sql
182
+
183
+ ```sql
184
+
185
+ CREATE TABLE log.user_auth
186
+ (
187
+ user_auth_id text DEFAULT next_id(), -- -
188
+ user_id text , -- ID користувача
189
+ user_auth_date timestamp without time zone , -- -
190
+ user_auth_type text , -- -
191
+ uid text , -- ідентифікатор автора запису в БД
192
+ cdate timestamp without time zone DEFAULT (now())::timestamp without time zone, -- Дата створення запису в БД
193
+ editor_id text , -- Ідентифікатор автора, який останій вніс зміни в запис
194
+ editor_date timestamp without time zone , -- Час останії зміни в записі
195
+ auth_date timestamp without time zone , -- Дата авторизації
196
+ auth_type text -- Тип авторизації
197
+ ,
198
+ CONSTRAINT log_user_auth_pkey PRIMARY KEY (user_auth_id)
199
+ );
200
+
201
+ ```
202
+
203
+ :::
204
+
@@ -0,0 +1,20 @@
1
+ # afterCard
2
+
3
+ ## Опис
4
+
5
+ Дозволяє здійснити додаткові операції та внести зміни до payload, що отримується при виклику GET API [`/card/:token`](../../api/table/card.md)
6
+
7
+ ## Параметри
8
+
9
+ ```js
10
+ import { addHook } from '@opengis/fastify-table/utils.js';
11
+
12
+ addHook('afterCard', async ({ table, id, user = {} }) => {
13
+ // do something;
14
+ });
15
+ ```
16
+
17
+ | Назва | Тип | Опис |
18
+ | ------- | ------ | ---------------------- |
19
+ | table | String | Таблиця / Токен |
20
+ | user | Object | Дані сесії користувача |
@@ -0,0 +1,25 @@
1
+ # preCard
2
+
3
+ ## Опис
4
+
5
+ Дозволяє здійснити попередню валідацію запиту до GET API [`/card/:token`](../../api/table/card.md)
6
+
7
+ ## Параметри
8
+
9
+ ```js
10
+ import { config, getToken, addHook, pgClients } from '@opengis/fastify-table/utils.js';
11
+
12
+ addHook('preCard', async ({ table, id, user = {} }) => {
13
+ const { client: pg } = pgClients || {};
14
+ const { uid } = config?.auth?.disable ? { uid: '1' } : user;
15
+ const opt = await getToken({
16
+ uid, token: table, mode: 'w', json: 1,
17
+ });
18
+ return opt;
19
+ });
20
+ ```
21
+
22
+ | Назва | Тип | Опис |
23
+ | ------- | ------ | ---------------------- |
24
+ | table | String | Таблиця / Токен |
25
+ | user | Object | Дані сесії користувача |
@@ -0,0 +1,26 @@
1
+ # afterData
2
+
3
+ ## Опис
4
+
5
+ Дозволяє здійснити додаткові операції та внести зміни до payload, що отримується при виклику API [`/data/:table`](../../api/table/data.md)
6
+
7
+ ## Параметри
8
+
9
+ ```js
10
+ import { addHook, pgClients } from '@opengis/fastify-table/utils.js';
11
+
12
+ addHook('afterData', async ({
13
+ table, payload = {}, user,
14
+ }) => {
15
+ if (!payload.rows?.length) return;
16
+ const { client: pg } = pgClients || {};
17
+ const result = await pg.query(`select $1=$1 as check from ${table} where 1=1`, ['1']).then((res) => res.rows?.[0] || {});
18
+ Object.assign(payload.rows[0], { ...result });
19
+ });
20
+ ```
21
+
22
+ | Назва | Тип | Опис |
23
+ | ------- | ------ | ---------------------- |
24
+ | table | String | Таблиця |
25
+ | payload | Object | Відповідь від API |
26
+ | user | Object | Дані сесії користувача |
@@ -0,0 +1,26 @@
1
+ # preData
2
+
3
+ ## Опис
4
+
5
+ Дозволяє здійснити попередню валідацію запиту до API [`/data/:table`](../../api/table/data.md)
6
+
7
+ ## Параметри
8
+
9
+ ```js
10
+ import { addHook, config } from '@opengis/fastify-table/utils.js';
11
+
12
+ addHook('preData', async ({ table, id, user }) => {
13
+ const { uid } = config?.auth?.disable ? { uid: '1' } : user || {};
14
+ if (!uid && !config?.local) {
15
+ return { message: 'access restricted: edit', status: 403 };
16
+ }
17
+ const opt = await getToken({ mode: 'w', token: table, uid, json: 1 });
18
+ return opt;
19
+ });
20
+ ```
21
+
22
+ | Назва | Тип | Опис |
23
+ | ------- | ------ | ---------------------- |
24
+ | table | String | Таблиця / Токен |
25
+ | id | String | ID об'єкту |
26
+ | user | Object | Дані сесії користувача |
@@ -0,0 +1,21 @@
1
+ # afterDelete
2
+
3
+ ## Опис
4
+
5
+ Дозволяє здійснити додаткові операції та внести зміни до payload, що отримується при виклику DELETE API [`/table/:token`](../../api/crud/deleteCrud.md)
6
+
7
+ ## Параметри
8
+
9
+ ```js
10
+ import { addHook } from '@opengis/fastify-table/utils.js';
11
+
12
+ addHook('afterDelete', async ({ table, id, user = {} }) => {
13
+ // do something;
14
+ });
15
+ ```
16
+
17
+ | Назва | Тип | Опис |
18
+ | ------- | ------ | ---------------------- |
19
+ | table | String | Таблиця |
20
+ | id | String | ID об'єкту |
21
+ | user | Object | Дані сесії користувача |
@@ -0,0 +1,26 @@
1
+ # preDelete
2
+
3
+ ## Опис
4
+
5
+ Дозволяє здійснити попередню валідацію запиту до DELETE API [`/table/:token`](../../api/crud/deleteCrud.md)
6
+
7
+ ## Параметри
8
+
9
+ ```js
10
+ import { addHook, config } from '@opengis/fastify-table/utils.js';
11
+
12
+ addHook('preDelete', async ({ table, id, user }) => {
13
+ const { uid } = config?.auth?.disable ? { uid: '1' } : user || {};
14
+ if (!uid && !config?.local) {
15
+ return { message: 'access restricted: delete', status: 403 };
16
+ }
17
+ const opt = await getToken({ mode: 'w', token: table, uid, json: 1 });
18
+ return opt;
19
+ });
20
+ ```
21
+
22
+ | Назва | Тип | Опис |
23
+ | ------- | ------ | ---------------------- |
24
+ | table | String | Таблиця / Токен |
25
+ | id | String | ID об'єкту |
26
+ | user | Object | Дані сесії користувача |
@@ -0,0 +1,19 @@
1
+ # afterForm
2
+
3
+ ## Опис
4
+
5
+ Дозволяє здійснити додаткові операції та внести зміни до payload, що отримується при виклику API [`/form/:token`](../../api/table/form.md)
6
+
7
+ ## Параметри
8
+
9
+ ```js
10
+ addHook('afterForm', async ({ form, payload, user = {} }) => {
11
+ // do something;
12
+ });
13
+ ```
14
+
15
+ | Назва | Тип | Опис |
16
+ | ------- | ------ | ---------------------- |
17
+ | form | String | Форма / Токен |
18
+ | payload | Object | Відповідь від API |
19
+ | user | Object | Дані сесії користувача |
@@ -0,0 +1,26 @@
1
+ # preForm
2
+
3
+ ## Опис
4
+
5
+ Дозволяє здійснити попередню валідацію запиту до API [`/form/:token`](../../api/table/form.md)
6
+
7
+ ## Параметри
8
+
9
+ ```js
10
+ import { addHook, config } from '@opengis/fastify-table/utils.js';
11
+
12
+ addHook('preForm', async ({ form, id, user }) => {
13
+ const { uid } = config?.auth?.disable ? { uid: '1' } : user || {};
14
+ if (!uid && !config?.local) {
15
+ return { message: 'access restricted: edit', status: 403 };
16
+ }
17
+ const opt = await getToken({ mode: 'w', token: form, uid, json: 1 });
18
+ return opt;
19
+ });
20
+ ```
21
+
22
+ | Назва | Тип | Опис |
23
+ | ------- | ------ | ---------------------- |
24
+ | form | String | Форма / Токен |
25
+ | id | String | ID об'єкту |
26
+ | user | Object | Дані сесії користувача |
@@ -0,0 +1,24 @@
1
+ # afterTemplate
2
+
3
+ ## Опис
4
+
5
+ Дозволяє здійснити додаткові операції та внести зміни до payload, що отримується при виклику API [`/template/:type/:token`](https://apidocs.softpro.ua/admin/api/templates/template.html)
6
+
7
+ ## Параметри
8
+
9
+ ```js
10
+ import { addHook, pgClients } from '@opengis/fastify-table/utils.js';
11
+
12
+ addHook('afterTemplate', async ({ name, type, payload, user = {} }) => {
13
+ const { client: pg } = pgClients || {};
14
+ const { uid } = user;
15
+ if (!uid || !name) return null;
16
+ });
17
+ ```
18
+
19
+ | Назва | Тип | Опис |
20
+ | ------- | ------ | ---------------------- |
21
+ | name | String | Назва шаблону / Токен |
22
+ | type | String | Тип шаблону |
23
+ | payload | Object | Відповідь від API |
24
+ | user | Object | Дані сесії користувача |
@@ -0,0 +1,29 @@
1
+ # preTemplate
2
+
3
+ ## Опис
4
+
5
+ Дозволяє здійснити попередню валідацію запиту до API [`/template/:type/:token`](https://apidocs.softpro.ua/admin/api/templates/template.html)
6
+
7
+ ## Параметри
8
+
9
+ ```js
10
+ import { addHook, getToken, config } from '@opengis/fastify-table/utils.js';
11
+
12
+ addHook('preTemplate', async ({ name, type, user = {} }) => {
13
+ if (!name || !type) return;
14
+ const { uid } = config?.auth?.disable ? { uid: '1' } : user;
15
+ const tokenData = await getToken({
16
+ uid, token: name, mode: 'w', json: 1,
17
+ }) // edit?
18
+ || await getToken({
19
+ uid, token: name, mode: 'a', json: 1,
20
+ }) || {}; // add?
21
+ return { name: tokenData?.[type] };
22
+ });
23
+ ```
24
+
25
+ | Назва | Тип | Опис |
26
+ | ------- | ------ | ---------------------- |
27
+ | name | String | Назва шаблону / Токен |
28
+ | type | String | Тип шаблону |
29
+ | user | Object | Дані сесії користувача |
@@ -0,0 +1,45 @@
1
+ ---
2
+ order: -1
3
+ ---
4
+
5
+ # Список хуків
6
+
7
+ ## GET /data/:table/:id? (data.js)
8
+
9
+ - **[preData](./data/preData.md)** - попередня обробка, можливість блокування доступу
10
+ - **[afterData](./data/afterData.md)** - `модифікація` результату, додавання пов'язаних даних тощо
11
+
12
+ ## GET /card/:table/:id? (card.js)
13
+
14
+ - **[preCard](./card/preCard.md)** - попередня обробка, можливість блокування доступу
15
+ - **[afterCard](./card/afterCard.md)** - `модифікація` результату, додавання пов'язаних даних тощо
16
+
17
+ ## GET /template/:type/:name (getTemplate.js)
18
+
19
+ - **[preTemplate](./getTemplate/preTemplate.md)** - попередня обробка, можливість блокування доступу [template](../api/admin/templates/template.md)
20
+ - **[afterTemplate](./getTemplate/afterTemplate.md)** - `модифікації` payload [template](../api/admin/templates/template.md)
21
+
22
+ ## GET /form/:name (form.js)
23
+
24
+ - **[preForm](./form/preForm.md)** - попередня обробка, можливість блокування доступу
25
+ - **[afterForm](./form/afterForm.md)** - `модифікація` форми, додавання користувацьких полів тощо
26
+
27
+ ## GET /table/:token (table.js) - CRUD
28
+
29
+ - **[preTable](./table/preTable.md)** - попередня обробка, можливість блокування доступу
30
+ - **[afterTable](./table/afterTable.md)** - `модифікація` результату, додавання пов'язаних даних тощо
31
+
32
+ ## POST /table/:token (insert.js) - CRUD
33
+
34
+ - **[preInsert](./insert/preInsert.md)** - попередня обробка, можливість блокування доступу
35
+ - **[afterInsert](./insert/afterInsert.md)** - виконання додаткових дій після внесення даних до БД [insert](../api/fastify-table/crud/insert.md)
36
+
37
+ ## PUT /table/:token (update.js) - CRUD
38
+
39
+ - **[preUpdate](./update/preUpdate.md)** - попередня обробка, можливість блокування доступу
40
+ - **[afterUpdate](./update/afterUpdate.md)** - виконання додаткових дій після внесення змін до БД [update](../api/fastify-table/crud/update.md)
41
+
42
+ ## DELETE /table/:token (deleteCrud.js) - CRUD
43
+
44
+ - **[preDelete](./deleteCrud/preDelete.md)** - попередня обробка, можливість блокування доступу
45
+ - **[afterDelete](./deleteCrud/afterDelete.md)** - виконання додаткових дій після внесення змін до БД [delete](../api/fastify-table/crud/deleteCrud.md)
@@ -0,0 +1,41 @@
1
+ # afterInsert
2
+
3
+ ## Опис
4
+
5
+ Дозволяє здійснити додаткові операції та внести зміни до payload, що отримується при виклику POST API [`/table/:token`](../../api/crud/insert.md)
6
+
7
+ ## Параметри
8
+
9
+ ```js
10
+ import { addHook, config, getTemplate, pgClients } from '@opengis/fastify-table/utils.js';
11
+
12
+ addHook('afterInsert', async ({ table, body = {}, payload: res = {}, user = {} }) => {
13
+ const { client: pg } = pgClients || {};
14
+ const { uid } = config?.auth?.disable ? { uid: '1' } : user;
15
+ if (!uid || !table || !Object.keys(body)?.length) return null;
16
+
17
+ const loadTable = await getTemplate('table', table);
18
+ if (!pg.pk[loadTable?.table || table]) return null;
19
+ const pk = pg.pk[loadTable?.table || table];
20
+ const id = res.rows?.[0]?.[pk];
21
+
22
+ const { rows: properties = [] } = await pg.query(`select column_id, name, title, format, data from admin.custom_column
23
+ where entity=$1 and uid=$2`, [table, uid]);
24
+
25
+ if (!id || !properties?.length) return null;
26
+
27
+ const q = properties
28
+ .filter((el) => Object.keys(body).includes(el.name))
29
+ .map((el) => `insert into crm.extra_data(property_id,property_key,property_entity,object_id,${el.format?.toLowerCase() === 'date' ? 'value_date' : 'value_text'})
30
+ select '${el.column_id}', '${el.name}', '${table}', '${id}', ${el.format?.toLowerCase() === 'date' ? `'${body[el.name]}'::timestamp without time zone` : `'${body[el.name]}'::text`}`)
31
+ .join(';\n');
32
+ return pg.query(q);
33
+ });
34
+ ```
35
+
36
+ | Назва | Тип | Опис |
37
+ | ------- | ------ | ---------------------- |
38
+ | table | String | Таблиця / Токен |
39
+ | body | Object | Тіло запиту, що надійшов до API |
40
+ | payload | Object | Відповідь від API |
41
+ | user | Object | Дані сесії користувача |
@@ -0,0 +1,25 @@
1
+ # preInsert
2
+
3
+ ## Опис
4
+
5
+ Дозволяє здійснити попередню валідацію запиту до POST API [`/table/:token`](../../api/crud/insert.md)
6
+
7
+ ## Параметри
8
+
9
+ ```js
10
+ import { addHook, config } from '@opengis/fastify-table/utils.js';
11
+
12
+ addHook('preInsert', async ({ table, user }) => {
13
+ const { uid } = config?.auth?.disable ? { uid: '1' } : user || {};
14
+ if (!uid && !config?.local) {
15
+ return { message: 'access restricted: edit', status: 403 };
16
+ }
17
+ const opt = await getToken({ mode: 'w', token: table, uid, json: 1 });
18
+ return opt;
19
+ });
20
+ ```
21
+
22
+ | Назва | Тип | Опис |
23
+ | ------- | ------ | ---------------------- |
24
+ | table | String | Таблиця / Токен |
25
+ | user | Object | Дані сесії користувача |
@@ -0,0 +1,20 @@
1
+ # afterTable
2
+
3
+ ## Опис
4
+
5
+ Дозволяє здійснити додаткові операції та внести зміни до payload, що отримується при виклику GET API [`/table/:token`](../../api/table/table.md)
6
+
7
+ ## Параметри
8
+
9
+ ```js
10
+ import { addHook } from '@opengis/fastify-table/utils.js';
11
+
12
+ addHook('afterTable', async ({ table, user = {} }) => {
13
+ // do something;
14
+ });
15
+ ```
16
+
17
+ | Назва | Тип | Опис |
18
+ | ------- | ------ | ---------------------- |
19
+ | table | String | Таблиця / Токен |
20
+ | user | Object | Дані сесії користувача |
@@ -0,0 +1,25 @@
1
+ # preTable
2
+
3
+ ## Опис
4
+
5
+ Дозволяє здійснити попередню валідацію запиту до GET API [`/table/:token`](../../api/table/table.md)
6
+
7
+ ## Параметри
8
+
9
+ ```js
10
+ import { config, getToken, addHook, pgClients } from '@opengis/fastify-table/utils.js';
11
+
12
+ addHook('preTable', async ({ table, user = {} }) => {
13
+ const { client: pg } = pgClients || {};
14
+ const { uid } = config?.auth?.disable ? { uid: '1' } : user;
15
+ const opt = await getToken({
16
+ uid, token: table, mode: 'w', json: 1,
17
+ });
18
+ return opt;
19
+ });
20
+ ```
21
+
22
+ | Назва | Тип | Опис |
23
+ | ------- | ------ | ---------------------- |
24
+ | table | String | Таблиця / Токен |
25
+ | user | Object | Дані сесії користувача |
@@ -0,0 +1,41 @@
1
+ # afterUpdate
2
+
3
+ ## Опис
4
+
5
+ Дозволяє здійснити додаткові операції та внести зміни до payload, що отримується при виклику PUT API [`/table/:token`](../../api/crud/update.md)
6
+
7
+ ## Параметри
8
+
9
+ ```js
10
+ import { addHook, pgClients } from '@opengis/fastify-table/utils.js';
11
+
12
+ addHook('afterUpdate', async ({ table, body = {}, payload: res = {}, user = {} }) => {
13
+ const { client: pg } = pgClients || {};
14
+ const { uid } = config?.auth?.disable ? { uid: '1' } : user;
15
+ if (!uid || !table || !Object.keys(body)?.length) return null;
16
+
17
+ const loadTable = await getTemplate('table', table);
18
+ if (!pg.pk[loadTable?.table || table]) return null;
19
+ const pk = pg.pk[loadTable?.table || table];
20
+ const id = res[pk];
21
+
22
+ const { rows: properties = [] } = await pg.query(`select column_id, name, title, format, data from admin.custom_column
23
+ where entity=$1 and uid=$2`, [table, uid]);
24
+
25
+ if (!id || !properties?.length) return null;
26
+
27
+ const q = `delete from crm.extra_data where property_entity='${table}' and object_id='${id}';${properties
28
+ .filter((el) => Object.keys(body).includes(el.name))
29
+ .map((el) => `insert into crm.extra_data(property_id,property_key,property_entity,object_id,${el.format?.toLowerCase() === 'date' ? 'value_date' : 'value_text'})
30
+ select '${el.column_id}', '${el.name}', '${table}', '${id}', ${el.format?.toLowerCase() === 'date' ? `'${body[el.name]}'::timestamp without time zone` : `'${body[el.name]}'::text`}`)
31
+ .join(';\n') || ''}`;
32
+ return pg.query(q);
33
+ });
34
+ ```
35
+
36
+ | Назва | Тип | Опис |
37
+ | ------- | ------ | ---------------------- |
38
+ | table | String | Таблиця / Токен |
39
+ | body | Object | Тіло запиту, що надійшов до API |
40
+ | payload | Object | Відповідь від API |
41
+ | user | Object | Дані сесії користувача |