@opengis/gis 0.2.20 → 0.2.21

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 (151) hide show
  1. package/README.md +5 -5
  2. package/dist/index.css +1 -1
  3. package/dist/index.js +2245 -2208
  4. package/dist/index.umd.cjs +32 -32
  5. package/module/cls.json +6 -6
  6. package/module/gis/card/gis.maps.table/index.yml +14 -14
  7. package/module/gis/card/gis.maps.table/main_info.hbs +25 -25
  8. package/module/gis/card/gis.maps.table/maps_layers.hbs +19 -19
  9. package/module/gis/card/gis.metadata.table/index.yml +22 -22
  10. package/module/gis/card/gis.metadata.table/main_info.hbs +20 -20
  11. package/module/gis/card/gis.metadata.table/metadata_info.hbs +27 -27
  12. package/module/gis/card/gis.metadata.table/other.hbs +25 -25
  13. package/module/gis/card/gis.rasters.table/index.yml +11 -11
  14. package/module/gis/card/gis.rasters.table/main_info.hbs +27 -27
  15. package/module/gis/card/gis.registers.table/cls.hbs +36 -36
  16. package/module/gis/card/gis.registers.table/columns.hbs +89 -89
  17. package/module/gis/card/gis.registers.table/filters.hbs +80 -80
  18. package/module/gis/card/gis.registers.table/index.yml +23 -23
  19. package/module/gis/card/gis.registers.table/main_info.hbs +35 -35
  20. package/module/gis/card/gis.registers.table/source.hbs +45 -45
  21. package/module/gis/card/gis.services.table/attributes.hbs +91 -91
  22. package/module/gis/card/gis.services.table/filters.hbs +83 -83
  23. package/module/gis/card/gis.services.table/index.yml +25 -25
  24. package/module/gis/card/gis.services.table/main_info.hbs +27 -27
  25. package/module/gis/card/gis.services.table/source.hbs +25 -25
  26. package/module/gis/cls/bool.yes_no.json +12 -12
  27. package/module/gis/cls/encoding.json +14 -14
  28. package/module/gis/cls/geom_type.json +14 -14
  29. package/module/gis/cls/gis.column_type.json +34 -34
  30. package/module/gis/cls/gis.column_view_type.json +26 -26
  31. package/module/gis/cls/gis.filter_type.json +22 -22
  32. package/module/gis/cls/language.json +10 -10
  33. package/module/gis/cls/meta.service_type.json +42 -42
  34. package/module/gis/cls/ogc.service.json +21 -21
  35. package/module/gis/cls/service_type.json +42 -42
  36. package/module/gis/cls/source_type.json +10 -10
  37. package/module/gis/cls/standarts.json +6 -6
  38. package/module/gis/cls/topic_category.json +106 -106
  39. package/module/gis/cls/update_frequency.json +29 -29
  40. package/module/gis/cls/view.json +21 -21
  41. package/module/gis/form/gis.group_list.form.json +17 -17
  42. package/module/gis/form/gis.maps.form.json +64 -64
  43. package/module/gis/form/gis.metadata.form.json +240 -240
  44. package/module/gis/form/gis.ogc_service.form.json +40 -40
  45. package/module/gis/form/gis.rasters.form.json +99 -99
  46. package/module/gis/form/gis.registers.form.json +110 -110
  47. package/module/gis/form/gis.registers_column.form.json +84 -84
  48. package/module/gis/form/gis.registers_filter.form.json +65 -65
  49. package/module/gis/form/gis.services.form.json +120 -120
  50. package/module/gis/form/gis.services_attributes.form.json +75 -75
  51. package/module/gis/form/gis.services_filter.form.json +65 -65
  52. package/module/gis/menu.json +43 -43
  53. package/module/gis/select/pg.columns.parent.sql +6 -6
  54. package/module/gis/select/pg.table_name.sql +17 -17
  55. package/module/gis/select/service_id.sql +1 -1
  56. package/module/gis/table/gis.group_list.table.json +35 -35
  57. package/module/gis/table/gis.maps.table.json +69 -69
  58. package/module/gis/table/gis.metadata.table.json +70 -70
  59. package/module/gis/table/gis.ogc_service.table.json +97 -97
  60. package/module/gis/table/gis.rasters.table.json +97 -97
  61. package/module/gis/table/gis.registers.table.json +79 -79
  62. package/module/gis/table/gis.services.table.json +99 -99
  63. package/module/gis/table/site.gis.registers.table.json +88 -88
  64. package/module/gis/table/site.gis.services.table.json +106 -106
  65. package/module/gis/templates/ISO19136_2017_gml_template.xml +330 -330
  66. package/module/gis/tokens.yml +5 -5
  67. package/module/test/cls/bp_build_type.json +37 -37
  68. package/module/test/cls/doc_status.json +31 -31
  69. package/module/test/cls/ts.temp_status.json +18 -18
  70. package/module/test/cls/ts.temp_structure.ts_class.json +49 -49
  71. package/module/test/cls/ts.temp_type.json +9 -9
  72. package/module/test/layer/bp.json +59 -59
  73. package/module/test/layer/bp1.yml +33 -33
  74. package/module/test/layer/individual.yml +53 -53
  75. package/module/test/layer/ts.linking_passport.yml +55 -55
  76. package/module/test/layer/ts.temp_structure.yml +50 -50
  77. package/module/test/map/addr.yml +21 -21
  78. package/module/test/map/bp_myo.json +43 -43
  79. package/module/test/map/bpf.json +43 -43
  80. package/module/test/map/main.json +36 -36
  81. package/module/test/map/mbd.json +91 -91
  82. package/module/test/map/ts.json +52 -52
  83. package/module/test/select/address_id.json +2 -2
  84. package/module/test/select/address_id.sql +7 -7
  85. package/module/test/select/core.user_uid.sql +1 -1
  86. package/module/test/table/data_address.street.table.json +69 -69
  87. package/module/test/table/data_bp_myo.bp.table.json +122 -122
  88. package/package.json +69 -69
  89. package/plugin.js +44 -44
  90. package/server/migrations/maps.sql +30 -30
  91. package/server/migrations/ogc.sql +106 -106
  92. package/server/migrations/rasters.sql +263 -263
  93. package/server/migrations/services.sql +247 -247
  94. package/server/migrations/widgets.sql +20 -20
  95. package/server/plugins/crons.js +21 -21
  96. package/server/plugins/mapnik/funcs/createXML.js +72 -72
  97. package/server/plugins/mapnik/funcs/gdalWrapper.js +72 -72
  98. package/server/plugins/mapnik/funcs/map.proto +241 -241
  99. package/server/plugins/mapnik/funcs/mapnik.js +106 -106
  100. package/server/plugins/mapnik/funcs/rasterConfig.js +11 -11
  101. package/server/plugins/mapnik/funcs/rasterExists.js +20 -20
  102. package/server/plugins/mapnik/funcs/rasterInfo.js +109 -109
  103. package/server/plugins/mapnik/funcs/rasterVrt.js +55 -55
  104. package/server/plugins/mapnik/funcs/rasterXML.js +65 -65
  105. package/server/plugins/mapnik/funcs/rootFolder.mjs +8 -8
  106. package/server/plugins/mapnik/utils/map.proto +241 -241
  107. package/server/plugins/vite.js +74 -74
  108. package/server/routes/gis/dashboard.js +29 -0
  109. package/server/routes/gis/index.mjs +61 -59
  110. package/server/routes/gis/metadata/metadataXML.js +13 -13
  111. package/server/routes/gis/ogc/map.info.point.js +124 -124
  112. package/server/routes/gis/registers/add.registry.js +35 -35
  113. package/server/routes/gis/registers/del.registry.js +14 -14
  114. package/server/routes/gis/registers/funcs/classifiers.js +100 -100
  115. package/server/routes/gis/registers/funcs/columns.js +4 -4
  116. package/server/routes/gis/registers/funcs/content.type.js +9 -9
  117. package/server/routes/gis/registers/funcs/get.info.js +89 -89
  118. package/server/routes/gis/registers/funcs/handleRegistryRequest.js +122 -122
  119. package/server/routes/gis/registers/gis.export.js +148 -148
  120. package/server/routes/gis/registers/gis.registry.js +38 -38
  121. package/server/routes/gis/registers/gis.registry.list.js +59 -59
  122. package/server/routes/gis/registers/insert.columns.js +107 -107
  123. package/server/routes/gis/registers/insert.filters.js +110 -110
  124. package/server/routes/gis/registers/map.registry.js +79 -79
  125. package/server/routes/gis/services/add.service.js +64 -64
  126. package/server/routes/gis/services/del.service.js +12 -12
  127. package/server/routes/gis/services/get.layer.geom.js +27 -27
  128. package/server/routes/gis/services/get.services.col.js +33 -33
  129. package/server/routes/gis/services/get.services.js +84 -84
  130. package/server/routes/gis/services/legend.auto.js +77 -77
  131. package/server/routes/map/controllers/layerList.js +60 -60
  132. package/server/routes/map/controllers/map.js +123 -123
  133. package/server/routes/map/controllers/mapCatalog.js +72 -72
  134. package/server/routes/map/controllers/mapCatalogAttribute.js +55 -55
  135. package/server/routes/map/controllers/mapFeatures.js +128 -128
  136. package/server/routes/map/controllers/mapFormat.js +83 -83
  137. package/server/routes/map/controllers/mapTiles.js +152 -152
  138. package/server/routes/map/controllers/maps.js +15 -15
  139. package/server/routes/map/controllers/marker_icon.js +43 -43
  140. package/server/routes/map/controllers/rtile.js +134 -134
  141. package/server/routes/map/controllers/vtile.js +172 -172
  142. package/server/routes/map/index.mjs +129 -129
  143. package/server/routes/map/maps/add.map.js +41 -41
  144. package/server/routes/map/maps/del.map.js +18 -18
  145. package/server/routes/map/maps/get.map.js +86 -86
  146. package/server/routes/map/vtile1.js +170 -170
  147. package/server/routes/map/widgets/add.widget.js +38 -38
  148. package/server/routes/map/widgets/del.widget.js +22 -22
  149. package/server/routes/map/widgets/get.widget.js +40 -40
  150. package/server/routes/root.mjs +3 -3
  151. package/utils.js +11 -11
@@ -1,107 +1,107 @@
1
- import { getToken } from '@opengis/fastify-table/utils.js';
2
- /**
3
- * Автозаповнення колонок Реєстру
4
- *
5
- * @method put
6
- * @summary Автозаповнення колонок Реєстру
7
- * @alias gis.registers
8
- * @type api
9
- * @tag dataset
10
- * @param {String} token - токен
11
- * @returns {Number} status - номер помилки
12
- * @returns {String} error - опис помилки
13
- * @returns {String} message - повідомлення про успішне виконання і передача певних даних
14
- */
15
- export default async function insertColumns(req,reply) {
16
- const {pg, user, params} = req;
17
- const token = params.token;
18
- if (!token) return { message: 'empty token', status: 400 };
19
- try {
20
-
21
- const tokenData = await getToken({ token, uid: user?.uid });
22
- if (!tokenData) return reply.code(400).send({ message: 'access restricted', status: 400 });
23
-
24
- const { id, type } = JSON.parse(tokenData) || {};
25
- if (!id||!type) return reply.code(403).send({ message: 'access restricted', status: 403 });
26
- if (!['services','registers'].includes(type)) return reply.code(403).send({ message: 'invalid type', status: 403 });
27
-
28
- const tableColumn = (type === 'registers') ? 'table_name':'source_path';
29
- const jsonColumn = (type === 'registers') ? 'columns':'attributes';
30
- const pk = (type === 'registers')?'register_id':'service_id';
31
-
32
- const select = `update gis.${type} set ${jsonColumn}=
33
- (select
34
- jsonb_agg(row_to_json(q)) as column_list
35
- from
36
- (select
37
- q.column_name as name,
38
- case
39
- when q.column_name='editor_id' and comment is null then 'Хто редагував'
40
- when q.column_name ilike '%geom%' and comment is null then 'Геометрія'
41
- when q.column_name='editor_date' and comment is null then 'Дата редагування'
42
- when q.column_name='image' and comment is null then 'Зображення'
43
- when q.column_name='file' and comment is null then 'Файл'
44
- when q.column_name='files' and comment is null then 'Файли'
45
- else comment
46
- end as ua,
47
- case
48
- when q.data_type in ('text','character varying') then 'text'
49
- when q.data_type ='ARRAY' then 'tags'
50
- when q.data_type in ('integer','numeric','double precision') then 'number'
51
- when q.data_type ='boolean' then 'yes/no'
52
- when q.data_type='USER-DEFINED' then 'geom'
53
- when q.data_type in ('date','timestamp without time zone') then 'date'
54
- end as format,
55
- '' as data,
56
- false as hidden_register,
57
- false as hidden_card
58
- from
59
- (
60
- select
61
- column_name,
62
- data_type,
63
- table_schema || '.' || table_name as table_name
64
- from
65
- (
66
- select
67
- distinct table_name,
68
- table_schema,
69
- column_name,
70
- data_type
71
- from
72
- information_schema.columns
73
- ) q
74
- ) q
75
-
76
- left join lateral (
77
- SELECT
78
- pgd.description AS comment,
79
- pgns.nspname||'.'||pgc.relname AS table_name,
80
- pg_attribute.attname AS column_name
81
-
82
- FROM
83
- pg_catalog.pg_description pgd
84
- JOIN pg_catalog.pg_class pgc ON pgd.objoid = pgc.oid
85
- JOIN pg_catalog.pg_namespace pgns ON pgc.relnamespace = pgns.oid
86
- JOIN pg_catalog.pg_attribute pg_attribute ON pgc.oid = pg_attribute.attrelid
87
- AND pg_attribute.attnum = pgd.objsubid
88
- )b on b.column_name=q.column_name and b.table_name=q.table_name
89
- where
90
- q.table_name = (
91
- select
92
- ${tableColumn}
93
- from
94
- gis.${type}
95
- where
96
- ${pk} = '${id}'
97
- ) and q.column_name not in ('cdate','uid') and q.data_type<>'json')q
98
- )
99
- where ${pk} = '${id}'
100
- `;
101
- await pg.one(select);
102
-
103
- return { message: 'Колонки заповнені упішно', status: 200 };
104
- } catch (err) {
105
- return reply.code(500).send({ message: err.message, status: 500 });
106
- }
107
- }
1
+ import { getToken } from '@opengis/fastify-table/utils.js';
2
+ /**
3
+ * Автозаповнення колонок Реєстру
4
+ *
5
+ * @method put
6
+ * @summary Автозаповнення колонок Реєстру
7
+ * @alias gis.registers
8
+ * @type api
9
+ * @tag dataset
10
+ * @param {String} token - токен
11
+ * @returns {Number} status - номер помилки
12
+ * @returns {String} error - опис помилки
13
+ * @returns {String} message - повідомлення про успішне виконання і передача певних даних
14
+ */
15
+ export default async function insertColumns(req,reply) {
16
+ const {pg, user, params} = req;
17
+ const token = params.token;
18
+ if (!token) return { message: 'empty token', status: 400 };
19
+ try {
20
+
21
+ const tokenData = await getToken({ token, uid: user?.uid });
22
+ if (!tokenData) return reply.code(400).send({ message: 'access restricted', status: 400 });
23
+
24
+ const { id, type } = JSON.parse(tokenData) || {};
25
+ if (!id||!type) return reply.code(403).send({ message: 'access restricted', status: 403 });
26
+ if (!['services','registers'].includes(type)) return reply.code(403).send({ message: 'invalid type', status: 403 });
27
+
28
+ const tableColumn = (type === 'registers') ? 'table_name':'source_path';
29
+ const jsonColumn = (type === 'registers') ? 'columns':'attributes';
30
+ const pk = (type === 'registers')?'register_id':'service_id';
31
+
32
+ const select = `update gis.${type} set ${jsonColumn}=
33
+ (select
34
+ jsonb_agg(row_to_json(q)) as column_list
35
+ from
36
+ (select
37
+ q.column_name as name,
38
+ case
39
+ when q.column_name='editor_id' and comment is null then 'Хто редагував'
40
+ when q.column_name ilike '%geom%' and comment is null then 'Геометрія'
41
+ when q.column_name='editor_date' and comment is null then 'Дата редагування'
42
+ when q.column_name='image' and comment is null then 'Зображення'
43
+ when q.column_name='file' and comment is null then 'Файл'
44
+ when q.column_name='files' and comment is null then 'Файли'
45
+ else comment
46
+ end as ua,
47
+ case
48
+ when q.data_type in ('text','character varying') then 'text'
49
+ when q.data_type ='ARRAY' then 'tags'
50
+ when q.data_type in ('integer','numeric','double precision') then 'number'
51
+ when q.data_type ='boolean' then 'yes/no'
52
+ when q.data_type='USER-DEFINED' then 'geom'
53
+ when q.data_type in ('date','timestamp without time zone') then 'date'
54
+ end as format,
55
+ '' as data,
56
+ false as hidden_register,
57
+ false as hidden_card
58
+ from
59
+ (
60
+ select
61
+ column_name,
62
+ data_type,
63
+ table_schema || '.' || table_name as table_name
64
+ from
65
+ (
66
+ select
67
+ distinct table_name,
68
+ table_schema,
69
+ column_name,
70
+ data_type
71
+ from
72
+ information_schema.columns
73
+ ) q
74
+ ) q
75
+
76
+ left join lateral (
77
+ SELECT
78
+ pgd.description AS comment,
79
+ pgns.nspname||'.'||pgc.relname AS table_name,
80
+ pg_attribute.attname AS column_name
81
+
82
+ FROM
83
+ pg_catalog.pg_description pgd
84
+ JOIN pg_catalog.pg_class pgc ON pgd.objoid = pgc.oid
85
+ JOIN pg_catalog.pg_namespace pgns ON pgc.relnamespace = pgns.oid
86
+ JOIN pg_catalog.pg_attribute pg_attribute ON pgc.oid = pg_attribute.attrelid
87
+ AND pg_attribute.attnum = pgd.objsubid
88
+ )b on b.column_name=q.column_name and b.table_name=q.table_name
89
+ where
90
+ q.table_name = (
91
+ select
92
+ ${tableColumn}
93
+ from
94
+ gis.${type}
95
+ where
96
+ ${pk} = '${id}'
97
+ ) and q.column_name not in ('cdate','uid') and q.data_type<>'json')q
98
+ )
99
+ where ${pk} = '${id}'
100
+ `;
101
+ await pg.one(select);
102
+
103
+ return { message: 'Колонки заповнені упішно', status: 200 };
104
+ } catch (err) {
105
+ return reply.code(500).send({ message: err.message, status: 500 });
106
+ }
107
+ }
@@ -1,110 +1,110 @@
1
- import { getToken } from '@opengis/fastify-table/utils.js';
2
-
3
- /**
4
- * Автозаповнення фільтрів Реєстру
5
- *
6
- * @method put
7
- * @summary Автозаповнення фільтрів Реєстру
8
- * @alias createDatasetFromApplicationApi
9
- * @type api
10
- * @tag dataset
11
- * @param {String} token - токен Реєстру
12
- * @returns {Number} status - номер помилки
13
- * @returns {String} error - опис помилки
14
- * @returns {String} message - повідомлення про успішне виконання і передача певних даних
15
- * @returns {String} headers - заголовки HTTP
16
- */
17
- export default async function insertFilters(req,reply) {
18
- const {
19
- pg, user, params,
20
- } =req;
21
- const token = params.token ;
22
- if (!token) return { message: 'empty token', status: 400 };
23
- try {
24
-
25
- const tokenData = await getToken({ token, uid: user?.uid });
26
- if (!tokenData) return reply.code(400).send({ message: 'access restricted', status: 400 });
27
-
28
- const { id, type } = JSON.parse(tokenData) || {};
29
-
30
- if (!id||!type) return reply.code(403).send({ message: 'access restricted', status: 403 });
31
- if (!['services','registers'].includes(type)) return reply.code(403).send({ message: 'invalid type', status: 403 });
32
-
33
- const tableColumn = (type === 'registers') ? 'table_name':'source_path';
34
- const pk = (type === 'registers')?'register_id':'service_id';
35
-
36
-
37
- const select = `update gis.${type} set filters=
38
- (select
39
- jsonb_agg(row_to_json(q)) as filter_list
40
- from
41
- (select
42
- q.column_name as id,
43
- case
44
- when q.column_name='editor_id' and comment is null then 'Хто редагував'
45
- when q.column_name ilike '%geom%' and comment is null then 'Геометрія'
46
- when q.column_name='editor_date' and comment is null then 'Дата редагування'
47
- when q.column_name='image' and comment is null then 'Зображення'
48
- when q.column_name='file' and comment is null then 'Файл'
49
- when q.column_name='files' and comment is null then 'Файли'
50
- else comment
51
- end as label,
52
- case
53
- when q.data_type in ('text','character varying','integer','numeric','double precision') then 'Text'
54
- when q.data_type ='ARRAY' then 'Tags'
55
- when q.data_type ='boolean' then 'Switcher'
56
- when q.data_type in ('date','timestamp without time zone') then 'Date'
57
- --else q.data_type
58
- end as type,
59
- '' as data,
60
- false as disabled
61
- from
62
- (
63
- select
64
- column_name,
65
- data_type,
66
- table_schema || '.' || table_name as table_name
67
- from
68
- (
69
- select
70
- distinct table_name,
71
- table_schema,
72
- column_name,
73
- data_type
74
- from
75
- information_schema.columns
76
- ) q
77
- ) q
78
-
79
- left join lateral (
80
- SELECT
81
- pgd.description AS comment,
82
- pgns.nspname||'.'||pgc.relname AS table_name,
83
- pg_attribute.attname AS column_name
84
-
85
- FROM
86
- pg_catalog.pg_description pgd
87
- JOIN pg_catalog.pg_class pgc ON pgd.objoid = pgc.oid
88
- JOIN pg_catalog.pg_namespace pgns ON pgc.relnamespace = pgns.oid
89
- JOIN pg_catalog.pg_attribute pg_attribute ON pgc.oid = pg_attribute.attrelid
90
- AND pg_attribute.attnum = pgd.objsubid
91
- )b on b.column_name=q.column_name and b.table_name=q.table_name
92
- where
93
- q.table_name = (
94
- select
95
- ${tableColumn}
96
- from
97
- gis.${type}
98
- where
99
- ${pk} = '${id}'
100
- ) and q.column_name not in ('cdate','uid','geom') and q.data_type not in ('json','USER-DEFINED'))q
101
- )
102
- where ${pk} = '${id}'
103
- `;
104
- await pg.one(select);
105
-
106
- return { message: 'Фільтри заповнені упішно', status: 200 };
107
- } catch (err) {
108
- return reply.code(500).send({ message: err.message, status: 500 });
109
- }
110
- }
1
+ import { getToken } from '@opengis/fastify-table/utils.js';
2
+
3
+ /**
4
+ * Автозаповнення фільтрів Реєстру
5
+ *
6
+ * @method put
7
+ * @summary Автозаповнення фільтрів Реєстру
8
+ * @alias createDatasetFromApplicationApi
9
+ * @type api
10
+ * @tag dataset
11
+ * @param {String} token - токен Реєстру
12
+ * @returns {Number} status - номер помилки
13
+ * @returns {String} error - опис помилки
14
+ * @returns {String} message - повідомлення про успішне виконання і передача певних даних
15
+ * @returns {String} headers - заголовки HTTP
16
+ */
17
+ export default async function insertFilters(req,reply) {
18
+ const {
19
+ pg, user, params,
20
+ } =req;
21
+ const token = params.token ;
22
+ if (!token) return { message: 'empty token', status: 400 };
23
+ try {
24
+
25
+ const tokenData = await getToken({ token, uid: user?.uid });
26
+ if (!tokenData) return reply.code(400).send({ message: 'access restricted', status: 400 });
27
+
28
+ const { id, type } = JSON.parse(tokenData) || {};
29
+
30
+ if (!id||!type) return reply.code(403).send({ message: 'access restricted', status: 403 });
31
+ if (!['services','registers'].includes(type)) return reply.code(403).send({ message: 'invalid type', status: 403 });
32
+
33
+ const tableColumn = (type === 'registers') ? 'table_name':'source_path';
34
+ const pk = (type === 'registers')?'register_id':'service_id';
35
+
36
+
37
+ const select = `update gis.${type} set filters=
38
+ (select
39
+ jsonb_agg(row_to_json(q)) as filter_list
40
+ from
41
+ (select
42
+ q.column_name as id,
43
+ case
44
+ when q.column_name='editor_id' and comment is null then 'Хто редагував'
45
+ when q.column_name ilike '%geom%' and comment is null then 'Геометрія'
46
+ when q.column_name='editor_date' and comment is null then 'Дата редагування'
47
+ when q.column_name='image' and comment is null then 'Зображення'
48
+ when q.column_name='file' and comment is null then 'Файл'
49
+ when q.column_name='files' and comment is null then 'Файли'
50
+ else comment
51
+ end as label,
52
+ case
53
+ when q.data_type in ('text','character varying','integer','numeric','double precision') then 'Text'
54
+ when q.data_type ='ARRAY' then 'Tags'
55
+ when q.data_type ='boolean' then 'Switcher'
56
+ when q.data_type in ('date','timestamp without time zone') then 'Date'
57
+ --else q.data_type
58
+ end as type,
59
+ '' as data,
60
+ false as disabled
61
+ from
62
+ (
63
+ select
64
+ column_name,
65
+ data_type,
66
+ table_schema || '.' || table_name as table_name
67
+ from
68
+ (
69
+ select
70
+ distinct table_name,
71
+ table_schema,
72
+ column_name,
73
+ data_type
74
+ from
75
+ information_schema.columns
76
+ ) q
77
+ ) q
78
+
79
+ left join lateral (
80
+ SELECT
81
+ pgd.description AS comment,
82
+ pgns.nspname||'.'||pgc.relname AS table_name,
83
+ pg_attribute.attname AS column_name
84
+
85
+ FROM
86
+ pg_catalog.pg_description pgd
87
+ JOIN pg_catalog.pg_class pgc ON pgd.objoid = pgc.oid
88
+ JOIN pg_catalog.pg_namespace pgns ON pgc.relnamespace = pgns.oid
89
+ JOIN pg_catalog.pg_attribute pg_attribute ON pgc.oid = pg_attribute.attrelid
90
+ AND pg_attribute.attnum = pgd.objsubid
91
+ )b on b.column_name=q.column_name and b.table_name=q.table_name
92
+ where
93
+ q.table_name = (
94
+ select
95
+ ${tableColumn}
96
+ from
97
+ gis.${type}
98
+ where
99
+ ${pk} = '${id}'
100
+ ) and q.column_name not in ('cdate','uid','geom') and q.data_type not in ('json','USER-DEFINED'))q
101
+ )
102
+ where ${pk} = '${id}'
103
+ `;
104
+ await pg.one(select);
105
+
106
+ return { message: 'Фільтри заповнені упішно', status: 200 };
107
+ } catch (err) {
108
+ return reply.code(500).send({ message: err.message, status: 500 });
109
+ }
110
+ }
@@ -1,79 +1,79 @@
1
- import { pgClients, getFilterSQL, getTemplate } from "@opengis/fastify-table/utils.js";
2
- import { attachClassifiers } from './funcs/classifiers.js';
3
- const pg = pgClients.client;
4
-
5
- export default async function mapRegistry(req,reply) {
6
- const { params = {}, query = {} } = req;
7
- const { slug, id } = params;
8
- const { filter, page = 1 } = query;
9
-
10
- if (!slug || !id) return reply.code(404).send({ message: 'Params slug and id is required', status: 404 });
11
-
12
- const mapTemplate = await getTemplate('map', slug);
13
- if (!mapTemplate) return reply.code(404).send({ message: 'Template not found', status: 404 });
14
-
15
- const listWidget = mapTemplate.widgets?.find(w => w.type === 'list' && w.visible !== false && w.id === id);
16
- if (!listWidget) return reply.code(404).send({ message: 'List widget not found', status: 404 });
17
-
18
- const {
19
- table,
20
- pk,
21
- query: baseQuery = '1=1',
22
- order,
23
- config = {},
24
- name = '',
25
- } = listWidget;
26
-
27
- const { columns = [], filters = [], limit: configLimit = 20 } = config;
28
- const limit = query.limit || configLimit;
29
- const offset = limit * (page - 1);
30
- const selectColumns = columns.map(col => col.name);
31
-
32
- const classifiers = columns
33
- .filter(col => col.data && ["select", "badge", "tags"].includes(col.format))
34
- .map(col => ({ name: col.name, classifier: col.data }));
35
-
36
-
37
- const { q: sqlFilter } = filter
38
- ? await getFilterSQL({ table, filter, json: 1 })
39
- : { q: '1=1' };
40
-
41
- const whereConditions = [baseQuery, sqlFilter].filter(Boolean).join(" AND ");
42
- const whereClause = whereConditions ? `WHERE ${whereConditions}` : "";
43
-
44
- const sqlBase = `FROM ${table} ${whereClause}`;
45
- const sqlOrder = order ? `ORDER BY ${order}` : "";
46
- const sqlLimit = `LIMIT $1 OFFSET $2`;
47
- const sqlSelect = `SELECT ${pk} as id, ${selectColumns.join(", ")}
48
- ${sqlBase}`;
49
- const dataQuery = `${sqlSelect} ${sqlOrder} ${sqlLimit}`;
50
- const totalQuery = `SELECT COUNT(*) ${sqlBase}`;
51
-
52
- const [dataRes, countRes] = await Promise.all([
53
- pg.query(dataQuery, [limit, offset]),
54
- pg.query(totalQuery)
55
- ]);
56
-
57
- const rows = await attachClassifiers(dataRes?.rows, classifiers);
58
- const total = parseInt(countRes?.rows[0]?.count || 0, 10);
59
-
60
- const listViewConfig = {};
61
- columns.forEach(col => {
62
- if (col.view_type === 'title') listViewConfig.title = col?.name;
63
- if (col.view_type === 'subtitle') listViewConfig.subtitle = col?.name;
64
- });
65
-
66
- return {
67
- name,
68
- rows,
69
- total,
70
- columns,
71
- filters,
72
- config: {
73
- ...listWidget,
74
- list: {
75
- ...listViewConfig
76
- }
77
- }
78
- };
79
- }
1
+ import { pgClients, getFilterSQL, getTemplate } from "@opengis/fastify-table/utils.js";
2
+ import { attachClassifiers } from './funcs/classifiers.js';
3
+ const pg = pgClients.client;
4
+
5
+ export default async function mapRegistry(req,reply) {
6
+ const { params = {}, query = {} } = req;
7
+ const { slug, id } = params;
8
+ const { filter, page = 1 } = query;
9
+
10
+ if (!slug || !id) return reply.code(404).send({ message: 'Params slug and id is required', status: 404 });
11
+
12
+ const mapTemplate = await getTemplate('map', slug);
13
+ if (!mapTemplate) return reply.code(404).send({ message: 'Template not found', status: 404 });
14
+
15
+ const listWidget = mapTemplate.widgets?.find(w => w.type === 'list' && w.visible !== false && w.id === id);
16
+ if (!listWidget) return reply.code(404).send({ message: 'List widget not found', status: 404 });
17
+
18
+ const {
19
+ table,
20
+ pk,
21
+ query: baseQuery = '1=1',
22
+ order,
23
+ config = {},
24
+ name = '',
25
+ } = listWidget;
26
+
27
+ const { columns = [], filters = [], limit: configLimit = 20 } = config;
28
+ const limit = query.limit || configLimit;
29
+ const offset = limit * (page - 1);
30
+ const selectColumns = columns.map(col => col.name);
31
+
32
+ const classifiers = columns
33
+ .filter(col => col.data && ["select", "badge", "tags"].includes(col.format))
34
+ .map(col => ({ name: col.name, classifier: col.data }));
35
+
36
+
37
+ const { q: sqlFilter } = filter
38
+ ? await getFilterSQL({ table, filter, json: 1 })
39
+ : { q: '1=1' };
40
+
41
+ const whereConditions = [baseQuery, sqlFilter].filter(Boolean).join(" AND ");
42
+ const whereClause = whereConditions ? `WHERE ${whereConditions}` : "";
43
+
44
+ const sqlBase = `FROM ${table} ${whereClause}`;
45
+ const sqlOrder = order ? `ORDER BY ${order}` : "";
46
+ const sqlLimit = `LIMIT $1 OFFSET $2`;
47
+ const sqlSelect = `SELECT ${pk} as id, ${selectColumns.join(", ")}
48
+ ${sqlBase}`;
49
+ const dataQuery = `${sqlSelect} ${sqlOrder} ${sqlLimit}`;
50
+ const totalQuery = `SELECT COUNT(*) ${sqlBase}`;
51
+
52
+ const [dataRes, countRes] = await Promise.all([
53
+ pg.query(dataQuery, [limit, offset]),
54
+ pg.query(totalQuery)
55
+ ]);
56
+
57
+ const rows = await attachClassifiers(dataRes?.rows, classifiers);
58
+ const total = parseInt(countRes?.rows[0]?.count || 0, 10);
59
+
60
+ const listViewConfig = {};
61
+ columns.forEach(col => {
62
+ if (col.view_type === 'title') listViewConfig.title = col?.name;
63
+ if (col.view_type === 'subtitle') listViewConfig.subtitle = col?.name;
64
+ });
65
+
66
+ return {
67
+ name,
68
+ rows,
69
+ total,
70
+ columns,
71
+ filters,
72
+ config: {
73
+ ...listWidget,
74
+ list: {
75
+ ...listViewConfig
76
+ }
77
+ }
78
+ };
79
+ }