@opengis/gis 0.2.184 → 0.2.186
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/dist/index.css +1 -1
- package/module/gis/card/gis.metadata.table/index.yml +22 -22
- package/module/gis/card/gis.rasters.table/index.yml +11 -11
- package/module/gis/card/gis.registers.table/index.yml +23 -23
- package/module/gis/card/gis.services.table/index.yml +25 -25
- package/module/gis/cls/bool.yes_no.json +12 -12
- package/module/gis/cls/encoding.json +14 -14
- package/module/gis/cls/geom_type.json +14 -14
- package/module/gis/cls/gis.column_type.json +34 -34
- package/module/gis/cls/gis.column_view_type.json +26 -26
- package/module/gis/cls/gis.filter_type.json +22 -22
- package/module/gis/cls/language.json +10 -10
- package/module/gis/cls/meta.service_type.json +42 -42
- package/module/gis/cls/ogc.service.json +21 -21
- package/module/gis/cls/source_type.json +10 -10
- package/module/gis/cls/standarts.json +6 -6
- package/module/gis/cls/topic_category.json +106 -106
- package/module/gis/cls/update_frequency.json +29 -29
- package/module/gis/cls/view.json +21 -21
- package/module/gis/form/feedback.answer.form.json +10 -10
- package/module/gis/form/gis.cartocss.form.json +64 -64
- package/module/gis/form/gis.group_list.form.json +17 -17
- package/module/gis/form/gis.maps.form.json +61 -61
- package/module/gis/form/gis.metadata.form.json +240 -240
- package/module/gis/form/gis.metadata_new.form.json +195 -195
- package/module/gis/form/gis.ogc_service.form.json +51 -51
- package/module/gis/form/gis.rasters.form.json +76 -76
- package/module/gis/form/gis.registers_column.form.json +84 -84
- package/module/gis/form/gis.registers_filter.form.json +65 -65
- package/module/gis/form/gis.services.form.json +111 -111
- package/module/gis/form/gis.services_attributes.form.json +75 -75
- package/module/gis/form/gis.services_filter.form.json +65 -65
- package/module/gis/menu.json +43 -43
- package/module/gis/select/admin.cls.name.sql +9 -9
- package/module/gis/select/layer_list.sql +7 -7
- package/module/gis/select/layer_list_text.sql +7 -7
- package/module/gis/select/pg.column_name.geometry.sql +12 -12
- package/module/gis/select/pg.columns.parent.sql +6 -6
- package/module/gis/select/pg.table_name.sql +17 -17
- package/module/gis/select/service_id.sql +1 -1
- package/module/gis/select/srid.sql +7 -7
- package/module/gis/table/gis.cartocss.table.json +74 -74
- package/module/gis/table/gis.group_list.table.json +58 -58
- package/module/gis/table/gis.maps.table.json +110 -110
- package/module/gis/table/gis.metadata.table.json +70 -70
- package/module/gis/table/gis.metadata_new.table.json +137 -137
- package/module/gis/table/gis.ogc_service.table.json +100 -100
- package/module/gis/table/gis.rasters.table.json +113 -113
- package/module/gis/table/gis.registers.table.json +143 -143
- package/module/gis/table/gis.services.table.json +120 -120
- package/module/gis/table/site.gis.registers.table.json +88 -88
- package/module/gis/table/site.gis.services.table.json +106 -106
- package/module/gis/templates/ISO19136_2017_gml_template.xml +330 -330
- package/module/gis/tokens.yml +5 -5
- package/module/permissions/form/permissions.users.form.json +151 -151
- package/module/permissions/table/gis.permissions.table.json +97 -97
- package/package.json +1 -1
- package/server/routes/registers/functions/getTableColumnMeta.js +6 -6
- package/server/routes/registers/functions/gis.suggest.js +22 -14
- package/server/routes/registers/functions/handleRegistryRequest.js +3 -2
- package/server/routes/registers/registers.route.test.js +1 -1
- package/server/routes/services/functions/get.services.js +34 -4
- package/server/routes/services/services.route.test.js +4 -0
package/module/gis/tokens.yml
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
maps: { table: 'gis.maps.table'}
|
|
2
|
-
metadata: { table: 'gis.metadata.table' }
|
|
3
|
-
rasters: { table: 'gis.rasters.table' }
|
|
4
|
-
registers: { table: 'gis.registers.table' }
|
|
5
|
-
services: { table: 'gis.services.table'}
|
|
1
|
+
maps: { table: 'gis.maps.table'}
|
|
2
|
+
metadata: { table: 'gis.metadata.table' }
|
|
3
|
+
rasters: { table: 'gis.rasters.table' }
|
|
4
|
+
registers: { table: 'gis.registers.table' }
|
|
5
|
+
services: { table: 'gis.services.table'}
|
|
@@ -1,152 +1,152 @@
|
|
|
1
|
-
{
|
|
2
|
-
"schema": {
|
|
3
|
-
"d1": {
|
|
4
|
-
"type": "HTML",
|
|
5
|
-
"title": false,
|
|
6
|
-
"text": "<h4 class='text-center'>Акаунт</h4><br>",
|
|
7
|
-
"col": 12
|
|
8
|
-
},
|
|
9
|
-
"user_name": {
|
|
10
|
-
"type": "Text",
|
|
11
|
-
"validators": [
|
|
12
|
-
"required"
|
|
13
|
-
],
|
|
14
|
-
"ua": "Ім'я",
|
|
15
|
-
"i": "Вноситься ім'я користувача, що буде відображатися у системі",
|
|
16
|
-
"ru": "Имя"
|
|
17
|
-
},
|
|
18
|
-
"sur_name": {
|
|
19
|
-
"type": "Text",
|
|
20
|
-
"validators": [
|
|
21
|
-
"required"
|
|
22
|
-
],
|
|
23
|
-
"ua": "Прізвище",
|
|
24
|
-
"i": "Вноситься прізвище користувача, що буде відображатися у системі",
|
|
25
|
-
"ru": "Фамилия"
|
|
26
|
-
},
|
|
27
|
-
"father_name": {
|
|
28
|
-
"ua": "По-батькові",
|
|
29
|
-
"type": "text"
|
|
30
|
-
},
|
|
31
|
-
"phone": {
|
|
32
|
-
"type": "MarkedText",
|
|
33
|
-
"mask": "+389999999999",
|
|
34
|
-
"id": "1",
|
|
35
|
-
"ua": "Телефон",
|
|
36
|
-
"i": "Вноситься телефон користувача",
|
|
37
|
-
"ru": "Телефон"
|
|
38
|
-
},
|
|
39
|
-
"email": {
|
|
40
|
-
"type": "Email",
|
|
41
|
-
"ua": "E-mail",
|
|
42
|
-
"i": "Вноситься електронна адреса користувача",
|
|
43
|
-
"ru": "E-mail",
|
|
44
|
-
"validators": [
|
|
45
|
-
"email"
|
|
46
|
-
]
|
|
47
|
-
},
|
|
48
|
-
"d2": {
|
|
49
|
-
"type": "HTML",
|
|
50
|
-
"title": false,
|
|
51
|
-
"text": "<h4 class='text-center'>Логін / Пароль</h4><br>",
|
|
52
|
-
"hidden": true,
|
|
53
|
-
"col": 12
|
|
54
|
-
},
|
|
55
|
-
"login": {
|
|
56
|
-
"type": "Text",
|
|
57
|
-
"ua": "Логін",
|
|
58
|
-
"i": "Вноситься довільний логін користувача латинськими літерами, що буде використовуватися для входу в систему",
|
|
59
|
-
"ru": "Логин",
|
|
60
|
-
"validators": [
|
|
61
|
-
"required"
|
|
62
|
-
]
|
|
63
|
-
},
|
|
64
|
-
"password": {
|
|
65
|
-
"type": "Password",
|
|
66
|
-
"validators": [
|
|
67
|
-
"required",
|
|
68
|
-
{
|
|
69
|
-
"type": "regexp",
|
|
70
|
-
"regexp": "^.{8,}$",
|
|
71
|
-
"flags": "gm",
|
|
72
|
-
"message": "Пароль повинен бути більше 8 символів"
|
|
73
|
-
}
|
|
74
|
-
],
|
|
75
|
-
"ua": "Пароль",
|
|
76
|
-
"i": "Вноситься пароль, що буде використовуватися для входу в систему (рекомендоване використання складних паролів)",
|
|
77
|
-
"ru": "Пароль"
|
|
78
|
-
},
|
|
79
|
-
"d3": {
|
|
80
|
-
"type": "HTML",
|
|
81
|
-
"title": false,
|
|
82
|
-
"text": "<h4 class='text-center'>Доступ</h4><br>",
|
|
83
|
-
"col": 12
|
|
84
|
-
},
|
|
85
|
-
"user_type": {
|
|
86
|
-
"type": "Autocomplete",
|
|
87
|
-
"data": "users.user_type",
|
|
88
|
-
"default": "regular",
|
|
89
|
-
"ua": "Тип користувача"
|
|
90
|
-
},
|
|
91
|
-
"enabled": {
|
|
92
|
-
"type": "Switcher",
|
|
93
|
-
"ua": "Off/On",
|
|
94
|
-
"help": "Off - користувач вимкнутий; On - Користувач увімкнутий"
|
|
95
|
-
},
|
|
96
|
-
"readonly": {
|
|
97
|
-
"type": "Switcher",
|
|
98
|
-
"ua": "Read Only",
|
|
99
|
-
"help": "On - У користувача усі інтерфейси в режимі перегляду, без редагування"
|
|
100
|
-
},
|
|
101
|
-
"d4": {
|
|
102
|
-
"type": "HTML",
|
|
103
|
-
"title": false,
|
|
104
|
-
"text": "<h4 class='text-center'>Профіль</h4><br>",
|
|
105
|
-
"col": 12
|
|
106
|
-
},
|
|
107
|
-
"user_rnokpp": {
|
|
108
|
-
"type": "MarkedText",
|
|
109
|
-
"mask": "9999999999",
|
|
110
|
-
"ua": "РНОКПП",
|
|
111
|
-
"col": 6,
|
|
112
|
-
"validators": [
|
|
113
|
-
{
|
|
114
|
-
"type": "regexp",
|
|
115
|
-
"regexp": "^([0-9]{10,10})$",
|
|
116
|
-
"flags": "g",
|
|
117
|
-
"message": "Лише цифри, 10 символів"
|
|
118
|
-
}
|
|
119
|
-
]
|
|
120
|
-
},
|
|
121
|
-
"organ_edrpou": {
|
|
122
|
-
"type": "MarkedText",
|
|
123
|
-
"mask": "99999999",
|
|
124
|
-
"ua": "Код ЄДРПОУ",
|
|
125
|
-
"col": 6,
|
|
126
|
-
"validators": [
|
|
127
|
-
{
|
|
128
|
-
"type": "regexp",
|
|
129
|
-
"regexp": "^([0-9]{8,8})$",
|
|
130
|
-
"flags": "g",
|
|
131
|
-
"message": "Лише цифри, 8 символів"
|
|
132
|
-
}
|
|
133
|
-
]
|
|
134
|
-
},
|
|
135
|
-
"unzr": {
|
|
136
|
-
"type": "MarkedText",
|
|
137
|
-
"mask": "99999999-9999",
|
|
138
|
-
"ua": "УНЗР",
|
|
139
|
-
"col": 6,
|
|
140
|
-
"i": "Унікальний номер запису в Єдиному державному демографічному реєстрі"
|
|
141
|
-
},
|
|
142
|
-
"avatar": {
|
|
143
|
-
"type": "File",
|
|
144
|
-
"ua": "Аватар",
|
|
145
|
-
"i": "Додається зображення, що буде відображено в системі у якості аватара цього користувача",
|
|
146
|
-
"ru": "Аватар",
|
|
147
|
-
"dir": "avatar"
|
|
148
|
-
}
|
|
149
|
-
},
|
|
150
|
-
"label_style": "vertical",
|
|
151
|
-
"width": 900
|
|
1
|
+
{
|
|
2
|
+
"schema": {
|
|
3
|
+
"d1": {
|
|
4
|
+
"type": "HTML",
|
|
5
|
+
"title": false,
|
|
6
|
+
"text": "<h4 class='text-center'>Акаунт</h4><br>",
|
|
7
|
+
"col": 12
|
|
8
|
+
},
|
|
9
|
+
"user_name": {
|
|
10
|
+
"type": "Text",
|
|
11
|
+
"validators": [
|
|
12
|
+
"required"
|
|
13
|
+
],
|
|
14
|
+
"ua": "Ім'я",
|
|
15
|
+
"i": "Вноситься ім'я користувача, що буде відображатися у системі",
|
|
16
|
+
"ru": "Имя"
|
|
17
|
+
},
|
|
18
|
+
"sur_name": {
|
|
19
|
+
"type": "Text",
|
|
20
|
+
"validators": [
|
|
21
|
+
"required"
|
|
22
|
+
],
|
|
23
|
+
"ua": "Прізвище",
|
|
24
|
+
"i": "Вноситься прізвище користувача, що буде відображатися у системі",
|
|
25
|
+
"ru": "Фамилия"
|
|
26
|
+
},
|
|
27
|
+
"father_name": {
|
|
28
|
+
"ua": "По-батькові",
|
|
29
|
+
"type": "text"
|
|
30
|
+
},
|
|
31
|
+
"phone": {
|
|
32
|
+
"type": "MarkedText",
|
|
33
|
+
"mask": "+389999999999",
|
|
34
|
+
"id": "1",
|
|
35
|
+
"ua": "Телефон",
|
|
36
|
+
"i": "Вноситься телефон користувача",
|
|
37
|
+
"ru": "Телефон"
|
|
38
|
+
},
|
|
39
|
+
"email": {
|
|
40
|
+
"type": "Email",
|
|
41
|
+
"ua": "E-mail",
|
|
42
|
+
"i": "Вноситься електронна адреса користувача",
|
|
43
|
+
"ru": "E-mail",
|
|
44
|
+
"validators": [
|
|
45
|
+
"email"
|
|
46
|
+
]
|
|
47
|
+
},
|
|
48
|
+
"d2": {
|
|
49
|
+
"type": "HTML",
|
|
50
|
+
"title": false,
|
|
51
|
+
"text": "<h4 class='text-center'>Логін / Пароль</h4><br>",
|
|
52
|
+
"hidden": true,
|
|
53
|
+
"col": 12
|
|
54
|
+
},
|
|
55
|
+
"login": {
|
|
56
|
+
"type": "Text",
|
|
57
|
+
"ua": "Логін",
|
|
58
|
+
"i": "Вноситься довільний логін користувача латинськими літерами, що буде використовуватися для входу в систему",
|
|
59
|
+
"ru": "Логин",
|
|
60
|
+
"validators": [
|
|
61
|
+
"required"
|
|
62
|
+
]
|
|
63
|
+
},
|
|
64
|
+
"password": {
|
|
65
|
+
"type": "Password",
|
|
66
|
+
"validators": [
|
|
67
|
+
"required",
|
|
68
|
+
{
|
|
69
|
+
"type": "regexp",
|
|
70
|
+
"regexp": "^.{8,}$",
|
|
71
|
+
"flags": "gm",
|
|
72
|
+
"message": "Пароль повинен бути більше 8 символів"
|
|
73
|
+
}
|
|
74
|
+
],
|
|
75
|
+
"ua": "Пароль",
|
|
76
|
+
"i": "Вноситься пароль, що буде використовуватися для входу в систему (рекомендоване використання складних паролів)",
|
|
77
|
+
"ru": "Пароль"
|
|
78
|
+
},
|
|
79
|
+
"d3": {
|
|
80
|
+
"type": "HTML",
|
|
81
|
+
"title": false,
|
|
82
|
+
"text": "<h4 class='text-center'>Доступ</h4><br>",
|
|
83
|
+
"col": 12
|
|
84
|
+
},
|
|
85
|
+
"user_type": {
|
|
86
|
+
"type": "Autocomplete",
|
|
87
|
+
"data": "users.user_type",
|
|
88
|
+
"default": "regular",
|
|
89
|
+
"ua": "Тип користувача"
|
|
90
|
+
},
|
|
91
|
+
"enabled": {
|
|
92
|
+
"type": "Switcher",
|
|
93
|
+
"ua": "Off/On",
|
|
94
|
+
"help": "Off - користувач вимкнутий; On - Користувач увімкнутий"
|
|
95
|
+
},
|
|
96
|
+
"readonly": {
|
|
97
|
+
"type": "Switcher",
|
|
98
|
+
"ua": "Read Only",
|
|
99
|
+
"help": "On - У користувача усі інтерфейси в режимі перегляду, без редагування"
|
|
100
|
+
},
|
|
101
|
+
"d4": {
|
|
102
|
+
"type": "HTML",
|
|
103
|
+
"title": false,
|
|
104
|
+
"text": "<h4 class='text-center'>Профіль</h4><br>",
|
|
105
|
+
"col": 12
|
|
106
|
+
},
|
|
107
|
+
"user_rnokpp": {
|
|
108
|
+
"type": "MarkedText",
|
|
109
|
+
"mask": "9999999999",
|
|
110
|
+
"ua": "РНОКПП",
|
|
111
|
+
"col": 6,
|
|
112
|
+
"validators": [
|
|
113
|
+
{
|
|
114
|
+
"type": "regexp",
|
|
115
|
+
"regexp": "^([0-9]{10,10})$",
|
|
116
|
+
"flags": "g",
|
|
117
|
+
"message": "Лише цифри, 10 символів"
|
|
118
|
+
}
|
|
119
|
+
]
|
|
120
|
+
},
|
|
121
|
+
"organ_edrpou": {
|
|
122
|
+
"type": "MarkedText",
|
|
123
|
+
"mask": "99999999",
|
|
124
|
+
"ua": "Код ЄДРПОУ",
|
|
125
|
+
"col": 6,
|
|
126
|
+
"validators": [
|
|
127
|
+
{
|
|
128
|
+
"type": "regexp",
|
|
129
|
+
"regexp": "^([0-9]{8,8})$",
|
|
130
|
+
"flags": "g",
|
|
131
|
+
"message": "Лише цифри, 8 символів"
|
|
132
|
+
}
|
|
133
|
+
]
|
|
134
|
+
},
|
|
135
|
+
"unzr": {
|
|
136
|
+
"type": "MarkedText",
|
|
137
|
+
"mask": "99999999-9999",
|
|
138
|
+
"ua": "УНЗР",
|
|
139
|
+
"col": 6,
|
|
140
|
+
"i": "Унікальний номер запису в Єдиному державному демографічному реєстрі"
|
|
141
|
+
},
|
|
142
|
+
"avatar": {
|
|
143
|
+
"type": "File",
|
|
144
|
+
"ua": "Аватар",
|
|
145
|
+
"i": "Додається зображення, що буде відображено в системі у якості аватара цього користувача",
|
|
146
|
+
"ru": "Аватар",
|
|
147
|
+
"dir": "avatar"
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
"label_style": "vertical",
|
|
151
|
+
"width": 900
|
|
152
152
|
}
|
|
@@ -1,98 +1,98 @@
|
|
|
1
|
-
{
|
|
2
|
-
"key": "uid",
|
|
3
|
-
"table": "admin.users",
|
|
4
|
-
"actions": [
|
|
5
|
-
"add",
|
|
6
|
-
"edit"
|
|
7
|
-
],
|
|
8
|
-
"controls": [
|
|
9
|
-
"search",
|
|
10
|
-
"list",
|
|
11
|
-
"add"
|
|
12
|
-
],
|
|
13
|
-
"order": "cdate desc",
|
|
14
|
-
"form": "admin.users.form",
|
|
15
|
-
"meta": {
|
|
16
|
-
"title": "full_name",
|
|
17
|
-
"search": "user_name,sur_name,father_name,login,email,phone"
|
|
18
|
-
},
|
|
19
|
-
"title": "Доступи до шарів",
|
|
20
|
-
"sql": [
|
|
21
|
-
{
|
|
22
|
-
"sql": "select count(*) as count_layers from gis.services_users_rel where user_id=t.uid",
|
|
23
|
-
"name": "count_layers_sql"
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
"sql": "select concat(user_name, ' ', sur_name, ' ', father_name, ' ') as full_name",
|
|
27
|
-
"name": "full_name_sql"
|
|
28
|
-
}
|
|
29
|
-
],
|
|
30
|
-
"columns": [
|
|
31
|
-
{
|
|
32
|
-
"ua": "ПІБ",
|
|
33
|
-
"name": "full_name",
|
|
34
|
-
"format": "text",
|
|
35
|
-
"link": "gis.permissions/{id}"
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
"ua": "Логін",
|
|
39
|
-
"name": "login",
|
|
40
|
-
"hidden": true,
|
|
41
|
-
"format": "text"
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
"ua": "Email",
|
|
45
|
-
"name": "email",
|
|
46
|
-
"format": "text"
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
"ua": "РНОКПП",
|
|
50
|
-
"name": "user_rnokpp",
|
|
51
|
-
"format": "text"
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
"ua": "Кількість шарів в доступі",
|
|
55
|
-
"name": "count_layers",
|
|
56
|
-
"format": "text"
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
"name": "cdate",
|
|
60
|
-
"ua": "Створено",
|
|
61
|
-
"format": "date"
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
"name": "enabled",
|
|
65
|
-
"ua": "On / Off",
|
|
66
|
-
"data": "yes_no",
|
|
67
|
-
"format": "check"
|
|
68
|
-
}
|
|
69
|
-
],
|
|
70
|
-
"filters": [
|
|
71
|
-
{
|
|
72
|
-
"ua": "РНОКПП",
|
|
73
|
-
"name": "user_rnokpp",
|
|
74
|
-
"type": "Text"
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
"ua": "Email",
|
|
78
|
-
"name": "email",
|
|
79
|
-
"type": "Text"
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
"ua": "Кількість шарів в доступі",
|
|
83
|
-
"name": "count_layers",
|
|
84
|
-
"type": "Range"
|
|
85
|
-
},
|
|
86
|
-
{
|
|
87
|
-
"name": "enabled",
|
|
88
|
-
"type": "Check",
|
|
89
|
-
"data": "yes_no",
|
|
90
|
-
"ua": "On / Off"
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
"ua": "Дата створення",
|
|
94
|
-
"name": "cdate",
|
|
95
|
-
"type": "Date"
|
|
96
|
-
}
|
|
97
|
-
]
|
|
1
|
+
{
|
|
2
|
+
"key": "uid",
|
|
3
|
+
"table": "admin.users",
|
|
4
|
+
"actions": [
|
|
5
|
+
"add",
|
|
6
|
+
"edit"
|
|
7
|
+
],
|
|
8
|
+
"controls": [
|
|
9
|
+
"search",
|
|
10
|
+
"list",
|
|
11
|
+
"add"
|
|
12
|
+
],
|
|
13
|
+
"order": "cdate desc",
|
|
14
|
+
"form": "admin.users.form",
|
|
15
|
+
"meta": {
|
|
16
|
+
"title": "full_name",
|
|
17
|
+
"search": "user_name,sur_name,father_name,login,email,phone"
|
|
18
|
+
},
|
|
19
|
+
"title": "Доступи до шарів",
|
|
20
|
+
"sql": [
|
|
21
|
+
{
|
|
22
|
+
"sql": "select count(*) as count_layers from gis.services_users_rel where user_id=t.uid",
|
|
23
|
+
"name": "count_layers_sql"
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"sql": "select concat(user_name, ' ', sur_name, ' ', father_name, ' ') as full_name",
|
|
27
|
+
"name": "full_name_sql"
|
|
28
|
+
}
|
|
29
|
+
],
|
|
30
|
+
"columns": [
|
|
31
|
+
{
|
|
32
|
+
"ua": "ПІБ",
|
|
33
|
+
"name": "full_name",
|
|
34
|
+
"format": "text",
|
|
35
|
+
"link": "gis.permissions/{id}"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"ua": "Логін",
|
|
39
|
+
"name": "login",
|
|
40
|
+
"hidden": true,
|
|
41
|
+
"format": "text"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"ua": "Email",
|
|
45
|
+
"name": "email",
|
|
46
|
+
"format": "text"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"ua": "РНОКПП",
|
|
50
|
+
"name": "user_rnokpp",
|
|
51
|
+
"format": "text"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"ua": "Кількість шарів в доступі",
|
|
55
|
+
"name": "count_layers",
|
|
56
|
+
"format": "text"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"name": "cdate",
|
|
60
|
+
"ua": "Створено",
|
|
61
|
+
"format": "date"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"name": "enabled",
|
|
65
|
+
"ua": "On / Off",
|
|
66
|
+
"data": "yes_no",
|
|
67
|
+
"format": "check"
|
|
68
|
+
}
|
|
69
|
+
],
|
|
70
|
+
"filters": [
|
|
71
|
+
{
|
|
72
|
+
"ua": "РНОКПП",
|
|
73
|
+
"name": "user_rnokpp",
|
|
74
|
+
"type": "Text"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"ua": "Email",
|
|
78
|
+
"name": "email",
|
|
79
|
+
"type": "Text"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"ua": "Кількість шарів в доступі",
|
|
83
|
+
"name": "count_layers",
|
|
84
|
+
"type": "Range"
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"name": "enabled",
|
|
88
|
+
"type": "Check",
|
|
89
|
+
"data": "yes_no",
|
|
90
|
+
"ua": "On / Off"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"ua": "Дата створення",
|
|
94
|
+
"name": "cdate",
|
|
95
|
+
"type": "Date"
|
|
96
|
+
}
|
|
97
|
+
]
|
|
98
98
|
}
|
package/package.json
CHANGED
|
@@ -88,11 +88,11 @@ export default async function getTableColumnMeta(
|
|
|
88
88
|
? `with c(id,text) as (select id, id as text from (select unnest("${queryColumn.replace(
|
|
89
89
|
/"/g,
|
|
90
90
|
""
|
|
91
|
-
)}") as id from ${tableName} t ${sqlTable})q group by id) select id, text from c`
|
|
91
|
+
)}"::text[]) as id from ${tableName} t ${sqlTable})q group by id) select id, text from c`
|
|
92
92
|
: `with c(id,text) as (select id, id as text, count(*) from (select unnest("${queryColumn.replace(
|
|
93
93
|
/"/g,
|
|
94
94
|
""
|
|
95
|
-
)}") as id from ${tableName} t ${sqlTable})q group by id limit ${defaultLimit}) select * from c`;
|
|
95
|
+
)}"::text[]) as id from ${tableName} t ${sqlTable})q group by id limit ${defaultLimit}) select * from c`;
|
|
96
96
|
|
|
97
97
|
return {
|
|
98
98
|
arr,
|
|
@@ -103,17 +103,17 @@ export default async function getTableColumnMeta(
|
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
const original = filtered
|
|
106
|
-
? `with c(id,text) as (select rtrim( replace( replace( replace( encode("${queryColumn.replace(/"/g, '')}"::bytea, 'base64'), '+', '' ), '-', '' ), '/', '' ), '=' ) as id, "${queryColumn.replace(
|
|
106
|
+
? `with c(id,text) as (select rtrim( replace( replace( replace( encode("${queryColumn.replace(/"/g, '')}"::text::bytea, 'base64'), '+', '' ), '-', '' ), '/', '' ), '=' ) as id, "${queryColumn.replace(
|
|
107
107
|
/"/g,
|
|
108
108
|
""
|
|
109
|
-
)}" as text from ${tableName} t ${sqlTable} group by "${queryColumn.replace(
|
|
109
|
+
)}"::text as text from ${tableName} t ${sqlTable} group by "${queryColumn.replace(
|
|
110
110
|
/"/g,
|
|
111
111
|
""
|
|
112
112
|
)}") select id, text from c`
|
|
113
|
-
: `with c(id,text) as (select rtrim( replace( replace( replace( encode("${queryColumn.replace(/"/g, '')}"::bytea, 'base64'), '+', '' ), '-', '' ), '/', '' ), '=' ) as id, "${queryColumn.replace(
|
|
113
|
+
: `with c(id,text) as (select rtrim( replace( replace( replace( encode("${queryColumn.replace(/"/g, '')}"::text::bytea, 'base64'), '+', '' ), '-', '' ), '/', '' ), '=' ) as id, "${queryColumn.replace(
|
|
114
114
|
/"/g,
|
|
115
115
|
""
|
|
116
|
-
)}" as text, count(*) from ${tableName} t ${sqlTable} group by "${queryColumn.replace(
|
|
116
|
+
)}"::text as text, count(*) from ${tableName} t ${sqlTable} group by "${queryColumn.replace(
|
|
117
117
|
/"/g,
|
|
118
118
|
""
|
|
119
119
|
)}" limit ${defaultLimit}) select * from c`;
|
|
@@ -11,7 +11,8 @@ const maxLimit = 100;
|
|
|
11
11
|
export default async function gisSuggest({ token, key, val, uid, lang = 'ua', limit: limit1 = 50 }, pg) {
|
|
12
12
|
const time = Date.now();
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
// GET /api/gis-registry/:id or GET /api/gis-service/:id
|
|
15
|
+
const redisKey = `${pg?.options?.database}:gis-suggest-filter:${token}`;
|
|
15
16
|
|
|
16
17
|
const cache = await rclient.get(redisKey);
|
|
17
18
|
|
|
@@ -19,27 +20,34 @@ export default async function gisSuggest({ token, key, val, uid, lang = 'ua', li
|
|
|
19
20
|
throw BadRequestError('invalid params: token');
|
|
20
21
|
}
|
|
21
22
|
|
|
22
|
-
const { register, filter } = JSON.parse(cache);
|
|
23
|
+
const { register, service, filter } = JSON.parse(cache);
|
|
24
|
+
|
|
25
|
+
if (!register && !service) {
|
|
26
|
+
throw BadRequestError('token is invalid');
|
|
27
|
+
}
|
|
23
28
|
|
|
24
29
|
const {
|
|
25
30
|
rows: [registry],
|
|
26
|
-
} = await pg.query(
|
|
27
|
-
`SELECT
|
|
31
|
+
} = register ? await pg.query(
|
|
32
|
+
`SELECT table_name, filters FROM gis.registers WHERE register_id=$1`,
|
|
28
33
|
[register],
|
|
29
|
-
)
|
|
34
|
+
) : await pg.query(
|
|
35
|
+
`SELECT source_path as table_name, filters FROM gis.services WHERE service_id=$1`,
|
|
36
|
+
[service],
|
|
37
|
+
)
|
|
30
38
|
|
|
31
39
|
if (!registry) {
|
|
32
40
|
throw NotFoundError('registry not found');
|
|
33
41
|
}
|
|
34
42
|
|
|
35
43
|
if (!registry.table_name) {
|
|
36
|
-
throw new Error('registry table not set
|
|
44
|
+
throw new Error(`${register ? 'registry' : 'service'} table not set`);
|
|
37
45
|
}
|
|
38
46
|
|
|
39
|
-
const filterData = (registry.filters).find(el => el.name === filter);
|
|
47
|
+
const filterData = (registry.filters || []).find(el => el.name === filter);
|
|
40
48
|
|
|
41
49
|
if (!filterData) {
|
|
42
|
-
throw new Error('registry filter not found
|
|
50
|
+
throw new Error(`${register ? 'registry' : 'service'} filter not found`);
|
|
43
51
|
}
|
|
44
52
|
|
|
45
53
|
const { name, data: cls } = filterData;
|
|
@@ -75,12 +83,12 @@ export default async function gisSuggest({ token, key, val, uid, lang = 'ua', li
|
|
|
75
83
|
if (arr && !cls) {
|
|
76
84
|
const sqlCls = count
|
|
77
85
|
? `select value, count(*) from (select ${pg.pgType?.[dataTypeID]?.includes("[]")
|
|
78
|
-
? `unnest("${name}")`
|
|
79
|
-
: `"${name}"`
|
|
86
|
+
? `unnest("${name}"::text[])`
|
|
87
|
+
: `"${name}"::text`
|
|
80
88
|
} as value from ${table} where 1=1)q group by value`
|
|
81
89
|
: `select array_agg(distinct value)::text[] from (select ${pg.pgType?.[dataTypeID]?.includes("[]")
|
|
82
|
-
? `unnest("${name}")`
|
|
83
|
-
: `"${name}"`
|
|
90
|
+
? `unnest("${name}"::text[])`
|
|
91
|
+
: `"${name}"::text`
|
|
84
92
|
} as value from ${table} where 1=1)q`;
|
|
85
93
|
|
|
86
94
|
if (pg?.pk?.[registry.table_name] && !cls) {
|
|
@@ -176,8 +184,8 @@ export default async function gisSuggest({ token, key, val, uid, lang = 'ua', li
|
|
|
176
184
|
"''"
|
|
177
185
|
)} o
|
|
178
186
|
WHERE ${pg.pgType[dataTypeID]?.includes("[]")
|
|
179
|
-
? `c.text = ANY(o."${name}")`
|
|
180
|
-
: `o."${name}" IS NOT DISTINCT FROM c.text`
|
|
187
|
+
? `c.text = ANY(o."${name}"::text)`
|
|
188
|
+
: `o."${name}"::text IS NOT DISTINCT FROM c.text`
|
|
181
189
|
} ) and ${whereQuery || "true"}
|
|
182
190
|
${order} LIMIT $${args.length}::bigint`
|
|
183
191
|
: `with c(id,text) as ( ${clsMeta.original} where ${whereQuery} ${order}) select * from c LIMIT $${args.length}::bigint`;
|
|
@@ -30,9 +30,10 @@ export async function handleRegistryRequest({
|
|
|
30
30
|
const filtersParsed = Array.isArray(filters) ? filters : JSON.parse(filters);
|
|
31
31
|
const activeFilters = await Promise.all((filtersParsed || []).filter((f) => f.disabled !== true).map(async (el) => {
|
|
32
32
|
const hash = createHash('md5').update([register_id, el.name, el.data].filter(Boolean).join('-')).digest('hex');
|
|
33
|
-
const redisKey = `${pg?.options?.database}:
|
|
33
|
+
const redisKey = `${pg?.options?.database}:gis-suggest-filter:${hash}`;
|
|
34
34
|
|
|
35
|
-
const
|
|
35
|
+
const cls = el.data ? await getSelect(el.data, pg) : undefined;
|
|
36
|
+
const { arr, sql } = cls || {};
|
|
36
37
|
|
|
37
38
|
const r = {
|
|
38
39
|
...el, id: el.name || el.id, type: el.type, api: `/api/gis-suggest/${hash}`, options: arr, select: sql
|