@opengis/gis 0.2.145 → 0.2.146

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 (201) hide show
  1. package/README.md +181 -181
  2. package/dist/{CardIcon-KPdJQSAj.js → CardIcon-BCll_4SB.js} +1 -1
  3. package/dist/{EntityCreatePage-Da8XgBKU.js → EntityCreatePage-Ch8NU_Yw.js} +14 -14
  4. package/dist/{EntityEditPage-QktKEAxz.js → EntityEditPage-CRRcW7FL.js} +27 -27
  5. package/dist/{EntityTablePage-D0CxSITf.js → EntityTablePage-DXJPsOx8.js} +26 -26
  6. package/dist/{ExtentOutlineLayer.vue_vue_type_script_setup_true_lang-B7Nkfd7c.js → ExtentOutlineLayer.vue_vue_type_script_setup_true_lang-BJ-zsrml.js} +1 -1
  7. package/dist/{HeaderActions.vue_vue_type_script_setup_true_lang-9kitzmJK.js → HeaderActions.vue_vue_type_script_setup_true_lang-EZGjVDor.js} +5 -5
  8. package/dist/{MapSettings-CBkp5Cfw.js → MapSettings-CG7u4F4i.js} +33 -33
  9. package/dist/{RastersTablePage-D1k_WisA.js → RastersTablePage-CN5hfj6F.js} +29 -29
  10. package/dist/cartocss-BNVXz6oJ.js +1065 -0
  11. package/dist/{import-utils-CVdAWcDL.js → import-utils-BwcMU3Gp.js} +33 -33
  12. package/dist/{index-DJKZSGVW.js → index-8aAArh78.js} +63 -63
  13. package/dist/index.css +1 -1
  14. package/dist/index.js +1 -1
  15. package/dist/index.umd.cjs +35 -35
  16. package/dist/raster-BN1gB-NS.js +804 -0
  17. package/dist/{register-Br5WdQas.js → register-DZ24Z6dC.js} +8 -8
  18. package/dist/{service-1sCTWkzU.js → service-DXLa4AiW.js} +392 -380
  19. package/dist/{vs-datatable-CviY_UkX.js → vs-datatable-DVC6-2mA.js} +28 -28
  20. package/module/cls.json +6 -6
  21. package/module/gis/card/gis.metadata.table/index.yml +22 -22
  22. package/module/gis/card/gis.metadata.table/main_info.hbs +20 -20
  23. package/module/gis/card/gis.metadata.table/metadata_info.hbs +27 -27
  24. package/module/gis/card/gis.metadata.table/other.hbs +25 -25
  25. package/module/gis/card/gis.rasters.table/index.yml +11 -11
  26. package/module/gis/card/gis.rasters.table/main_info.hbs +27 -27
  27. package/module/gis/card/gis.registers.table/cls.hbs +36 -36
  28. package/module/gis/card/gis.registers.table/columns.hbs +89 -89
  29. package/module/gis/card/gis.registers.table/filters.hbs +80 -80
  30. package/module/gis/card/gis.registers.table/index.yml +23 -23
  31. package/module/gis/card/gis.registers.table/main_info.hbs +35 -35
  32. package/module/gis/card/gis.registers.table/source.hbs +45 -45
  33. package/module/gis/card/gis.services.table/attributes.hbs +91 -91
  34. package/module/gis/card/gis.services.table/filters.hbs +83 -83
  35. package/module/gis/card/gis.services.table/index.yml +25 -25
  36. package/module/gis/card/gis.services.table/main_info.hbs +27 -27
  37. package/module/gis/card/gis.services.table/source.hbs +25 -25
  38. package/module/gis/cls/bool.yes_no.json +12 -12
  39. package/module/gis/cls/encoding.json +14 -14
  40. package/module/gis/cls/geom_type.json +14 -14
  41. package/module/gis/cls/gis.column_type.json +34 -34
  42. package/module/gis/cls/gis.column_view_type.json +26 -26
  43. package/module/gis/cls/gis.filter_type.json +22 -22
  44. package/module/gis/cls/language.json +10 -10
  45. package/module/gis/cls/meta.service_type.json +42 -42
  46. package/module/gis/cls/ogc.service.json +21 -21
  47. package/module/gis/cls/service_type.json +42 -42
  48. package/module/gis/cls/source_type.json +10 -10
  49. package/module/gis/cls/standarts.json +6 -6
  50. package/module/gis/cls/topic_category.json +106 -106
  51. package/module/gis/cls/update_frequency.json +29 -29
  52. package/module/gis/cls/view.json +21 -21
  53. package/module/gis/form/feedback.answer.form.json +10 -10
  54. package/module/gis/form/gis.cartocss.form.json +64 -64
  55. package/module/gis/form/gis.group_list.form.json +17 -17
  56. package/module/gis/form/gis.maps.form.json +61 -61
  57. package/module/gis/form/gis.metadata.form.json +240 -240
  58. package/module/gis/form/gis.metadata_new.form.json +195 -195
  59. package/module/gis/form/gis.ogc_service.form.json +51 -51
  60. package/module/gis/form/gis.rasters.form.json +76 -76
  61. package/module/gis/form/gis.registers.form.json +124 -124
  62. package/module/gis/form/gis.registers_column.form.json +84 -84
  63. package/module/gis/form/gis.registers_filter.form.json +65 -65
  64. package/module/gis/form/gis.services.form.json +111 -111
  65. package/module/gis/form/gis.services_attributes.form.json +75 -75
  66. package/module/gis/form/gis.services_filter.form.json +65 -65
  67. package/module/gis/menu.json +43 -43
  68. package/module/gis/select/admin.cls.name.sql +9 -9
  69. package/module/gis/select/layer_list.sql +7 -7
  70. package/module/gis/select/layer_list_text.sql +7 -7
  71. package/module/gis/select/pg.column_name.geometry.sql +12 -12
  72. package/module/gis/select/pg.columns.parent.sql +6 -6
  73. package/module/gis/select/pg.table_name.sql +17 -17
  74. package/module/gis/select/service_id.sql +1 -1
  75. package/module/gis/table/gis.cartocss.table.json +74 -74
  76. package/module/gis/table/gis.group_list.table.json +58 -58
  77. package/module/gis/table/gis.maps.table.json +110 -110
  78. package/module/gis/table/gis.metadata.table.json +70 -70
  79. package/module/gis/table/gis.metadata_new.table.json +137 -137
  80. package/module/gis/table/gis.ogc_service.table.json +100 -100
  81. package/module/gis/table/gis.rasters.table.json +101 -101
  82. package/module/gis/table/gis.registers.table.json +143 -143
  83. package/module/gis/table/gis.services.table.json +120 -120
  84. package/module/gis/table/site.gis.registers.table.json +88 -88
  85. package/module/gis/table/site.gis.services.table.json +106 -106
  86. package/module/gis/templates/ISO19136_2017_gml_template.xml +330 -330
  87. package/module/gis/tokens.yml +5 -5
  88. package/module/permissions/form/permissions.users.form.json +151 -151
  89. package/module/permissions/table/gis.permissions.table.json +97 -97
  90. package/module/test/cls/bp_build_type.json +37 -37
  91. package/module/test/cls/doc_status.json +31 -31
  92. package/module/test/cls/ts.temp_status.json +18 -18
  93. package/module/test/cls/ts.temp_structure.ts_class.json +49 -49
  94. package/module/test/cls/ts.temp_type.json +9 -9
  95. package/module/test/layer/bp.json +59 -59
  96. package/module/test/layer/bp1.yml +33 -33
  97. package/module/test/layer/individual.yml +53 -53
  98. package/module/test/layer/ts.linking_passport.yml +55 -55
  99. package/module/test/layer/ts.temp_structure.yml +50 -50
  100. package/module/test/map/addr.yml +21 -21
  101. package/module/test/map/bp_myo.json +43 -43
  102. package/module/test/map/bpf.json +43 -43
  103. package/module/test/map/main.json +37 -37
  104. package/module/test/map/mbd.json +92 -92
  105. package/module/test/map/ts.json +53 -53
  106. package/module/test/select/address_id.json +2 -2
  107. package/module/test/select/address_id.sql +7 -7
  108. package/module/test/select/core.user_uid.sql +1 -1
  109. package/module/test/table/data_address.street.table.json +69 -69
  110. package/module/test/table/data_bp_myo.bp.table.json +122 -122
  111. package/package.json +75 -75
  112. package/plugin.js +55 -55
  113. package/server/migrations/array_intersect.sql +13 -13
  114. package/server/migrations/cartocss.sql +27 -27
  115. package/server/migrations/group_list.sql +74 -74
  116. package/server/migrations/maps.sql +30 -30
  117. package/server/migrations/metadata.sql +415 -415
  118. package/server/migrations/ogc.sql +106 -106
  119. package/server/migrations/rasters.sql +265 -265
  120. package/server/migrations/services.sql +247 -247
  121. package/server/migrations/services_users_rel.sql +22 -22
  122. package/server/migrations/widgets.sql +20 -20
  123. package/server/plugins/crons.js +21 -21
  124. package/server/plugins/mapnik/funcs/checkRasterFile.js +109 -109
  125. package/server/plugins/mapnik/funcs/mapnik.js +151 -151
  126. package/server/plugins/mapnik/funcs/rootFolder.mjs +8 -8
  127. package/server/plugins/mapnik/map.proto +230 -230
  128. package/server/plugins/vite.js +74 -74
  129. package/server/routes/gis/cartocss/add.cartocss.js +42 -42
  130. package/server/routes/gis/cartocss/get.cartocss.js +59 -59
  131. package/server/routes/gis/checkXML.js +117 -117
  132. package/server/routes/gis/dashboard.js +29 -29
  133. package/server/routes/gis/index.mjs +87 -87
  134. package/server/routes/gis/metadata/editMetadata.js +34 -34
  135. package/server/routes/gis/metadata/metadataXML.js +13 -13
  136. package/server/routes/gis/ogc/map.info.point.js +124 -124
  137. package/server/routes/gis/registers/add.registry.js +35 -35
  138. package/server/routes/gis/registers/del.registry.js +14 -14
  139. package/server/routes/gis/registers/funcs/classifiers.js +100 -100
  140. package/server/routes/gis/registers/funcs/columns.js +3 -3
  141. package/server/routes/gis/registers/funcs/content.type.js +9 -9
  142. package/server/routes/gis/registers/funcs/get.info.js +89 -89
  143. package/server/routes/gis/registers/funcs/handleRegistryRequest.js +146 -146
  144. package/server/routes/gis/registers/gis.export.js +153 -153
  145. package/server/routes/gis/registers/gis.registry.js +64 -64
  146. package/server/routes/gis/registers/gis.registry.list.js +59 -59
  147. package/server/routes/gis/registers/insert.columns.js +107 -107
  148. package/server/routes/gis/registers/insert.filters.js +110 -110
  149. package/server/routes/gis/registers/map.registry.js +79 -79
  150. package/server/routes/gis/services/add.service.js +64 -64
  151. package/server/routes/gis/services/del.service.js +12 -12
  152. package/server/routes/gis/services/get.layer.geom.js +27 -27
  153. package/server/routes/gis/services/get.services.col.js +33 -33
  154. package/server/routes/gis/services/get.services.js +84 -84
  155. package/server/routes/gis/services/legend.auto.js +77 -77
  156. package/server/routes/map/controllers/clearTiles.js +34 -34
  157. package/server/routes/map/controllers/geojson.js +187 -187
  158. package/server/routes/map/controllers/jsonData.js +205 -205
  159. package/server/routes/map/controllers/layerList.js +102 -102
  160. package/server/routes/map/controllers/map.js +123 -123
  161. package/server/routes/map/controllers/mapCatalog.js +72 -72
  162. package/server/routes/map/controllers/mapCatalogAttribute.js +55 -55
  163. package/server/routes/map/controllers/mapFeatures.js +128 -128
  164. package/server/routes/map/controllers/mapFormat.js +234 -234
  165. package/server/routes/map/controllers/mapTiles.js +152 -152
  166. package/server/routes/map/controllers/maps.js +15 -15
  167. package/server/routes/map/controllers/marker_icon.js +43 -43
  168. package/server/routes/map/controllers/vtile.js +172 -172
  169. package/server/routes/map/index.mjs +169 -169
  170. package/server/routes/map/maps/add.map.js +43 -43
  171. package/server/routes/map/maps/del.map.js +18 -18
  172. package/server/routes/map/maps/get.map.js +118 -118
  173. package/server/routes/map/vtile1.js +179 -179
  174. package/server/routes/map/widgets/add.widget.js +38 -38
  175. package/server/routes/map/widgets/del.widget.js +22 -22
  176. package/server/routes/map/widgets/get.widget.js +40 -40
  177. package/server/routes/mapnik/controllers/clearTiles.js +106 -106
  178. package/server/routes/mapnik/controllers/createXml.js +67 -67
  179. package/server/routes/mapnik/controllers/createXmlMulti.js +76 -76
  180. package/server/routes/mapnik/controllers/fileSearch.js +38 -38
  181. package/server/routes/mapnik/controllers/fileStat.js +28 -28
  182. package/server/routes/mapnik/controllers/mapnikLogger.js +29 -29
  183. package/server/routes/mapnik/controllers/mapnikStat.js +19 -19
  184. package/server/routes/mapnik/controllers/pretile.js +144 -144
  185. package/server/routes/mapnik/controllers/rasterInfo.js +57 -57
  186. package/server/routes/mapnik/controllers/readDir.js +22 -22
  187. package/server/routes/mapnik/controllers/rtile.js +150 -150
  188. package/server/routes/mapnik/controllers/uploadRaster.js +157 -157
  189. package/server/routes/mapnik/functions/cartoBounds.js +32 -32
  190. package/server/routes/mapnik/functions/convertBoundToTile.js +27 -27
  191. package/server/routes/mapnik/functions/uploadXML.js +113 -113
  192. package/server/routes/mapnik/index.js +40 -40
  193. package/server/routes/permissions/controllers/catalog.permissions.edit.js +22 -22
  194. package/server/routes/permissions/controllers/catalog.permissions.js +7 -7
  195. package/server/routes/permissions/controllers/gis.catalog.js +80 -80
  196. package/server/routes/permissions/controllers/utils/get.permissions.js +59 -59
  197. package/server/routes/permissions/index.mjs +18 -18
  198. package/server/routes/root.mjs +3 -3
  199. package/utils.js +13 -13
  200. package/dist/cartocss-KfS-aCRn.js +0 -1053
  201. package/dist/raster-CKQiGAgN.js +0 -792
@@ -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
+ }
@@ -1,65 +1,65 @@
1
- import { dataDelete, dataInsert, dataUpdate, pgClients } from "@opengis/fastify-table/utils.js";
2
-
3
- async function updateTemplate(client, body, uid, id) {
4
- if (!body || !id) return;
5
-
6
- await dataDelete({
7
- pg: client,
8
- id,
9
- table: 'admin.templates',
10
- uid,
11
- });
12
- const rowCount = await dataInsert({
13
- pg: client,
14
- id,
15
- table: 'admin.templates',
16
- data: { body, name: id },
17
- uid,
18
- }).then(el => el.rowCount);
19
- return rowCount;
20
- }
21
- export default async function addService({
22
- method, params = {}, body, pg = pgClients.client, user = {},
23
- }, reply) {
24
- if (method === 'PUT' && !params.id) {
25
- return reply.status(400).send('not enough params: id');
26
- }
27
-
28
- const { uid = '0' } = user;
29
-
30
- const client = await pg.connect();
31
- try {
32
- await client.query('begin');
33
-
34
- if (method === 'POST') {
35
- const { rows = [] } = await dataInsert({
36
- pg: client,
37
- id: params.id,
38
- table: 'gis.services',
39
- data: body,
40
- uid,
41
- });
42
- const istemplate = await updateTemplate(client, body.html, uid, rows[0]?.service_id);
43
- await client.query('commit');
44
- return reply.status(200).send(rows[0]);
45
- }
46
-
47
-
48
- const row = await dataUpdate({
49
- pg: client,
50
- id: params.id,
51
- table: 'gis.services',
52
- data: body,
53
- uid,
54
- });
55
- const istemplate = await updateTemplate(client, body.html, uid, params.id);
56
- await client.query('commit');
57
- return reply.status(200).send(row);
58
-
59
- } catch (err) {
60
- await client.query('rollback');
61
- return reply.status(500).send(err.toString());
62
- } finally {
63
- client.release();
64
- }
1
+ import { dataDelete, dataInsert, dataUpdate, pgClients } from "@opengis/fastify-table/utils.js";
2
+
3
+ async function updateTemplate(client, body, uid, id) {
4
+ if (!body || !id) return;
5
+
6
+ await dataDelete({
7
+ pg: client,
8
+ id,
9
+ table: 'admin.templates',
10
+ uid,
11
+ });
12
+ const rowCount = await dataInsert({
13
+ pg: client,
14
+ id,
15
+ table: 'admin.templates',
16
+ data: { body, name: id },
17
+ uid,
18
+ }).then(el => el.rowCount);
19
+ return rowCount;
20
+ }
21
+ export default async function addService({
22
+ method, params = {}, body, pg = pgClients.client, user = {},
23
+ }, reply) {
24
+ if (method === 'PUT' && !params.id) {
25
+ return reply.status(400).send('not enough params: id');
26
+ }
27
+
28
+ const { uid = '0' } = user;
29
+
30
+ const client = await pg.connect();
31
+ try {
32
+ await client.query('begin');
33
+
34
+ if (method === 'POST') {
35
+ const { rows = [] } = await dataInsert({
36
+ pg: client,
37
+ id: params.id,
38
+ table: 'gis.services',
39
+ data: body,
40
+ uid,
41
+ });
42
+ const istemplate = await updateTemplate(client, body.html, uid, rows[0]?.service_id);
43
+ await client.query('commit');
44
+ return reply.status(200).send(rows[0]);
45
+ }
46
+
47
+
48
+ const row = await dataUpdate({
49
+ pg: client,
50
+ id: params.id,
51
+ table: 'gis.services',
52
+ data: body,
53
+ uid,
54
+ });
55
+ const istemplate = await updateTemplate(client, body.html, uid, params.id);
56
+ await client.query('commit');
57
+ return reply.status(200).send(row);
58
+
59
+ } catch (err) {
60
+ await client.query('rollback');
61
+ return reply.status(500).send(err.toString());
62
+ } finally {
63
+ client.release();
64
+ }
65
65
  }
@@ -1,13 +1,13 @@
1
- import { dataDelete, pgClients } from "@opengis/fastify-table/utils.js";
2
-
3
- export default async function deleteService({
4
- params = {}, pg = pgClients.client, user = {},
5
- }, reply) {
6
- const row = await dataDelete({
7
- pg,
8
- id: params.id,
9
- table: 'gis.services',
10
- uid: user?.uid,
11
- });
12
- return reply.status(200).send(row);
1
+ import { dataDelete, pgClients } from "@opengis/fastify-table/utils.js";
2
+
3
+ export default async function deleteService({
4
+ params = {}, pg = pgClients.client, user = {},
5
+ }, reply) {
6
+ const row = await dataDelete({
7
+ pg,
8
+ id: params.id,
9
+ table: 'gis.services',
10
+ uid: user?.uid,
11
+ });
12
+ return reply.status(200).send(row);
13
13
  }
@@ -1,27 +1,27 @@
1
- export default async function getLayerGeom(req) {
2
- const { pg, params, query } = req;
3
-
4
- const { id } = params;
5
- if (!id) return { message: 'id is empty', status: 403 };
6
-
7
- const selectTable = `select source_path,geometry_column from gis.services where service_id='${id}'`;
8
- const { source_path: table, geometry_column: geometryColumn = 'geom' } = await pg.one(selectTable);
9
- if (!table) return;
10
- const selectGeom = `
11
- SELECT 'FeatureCollection' As type,
12
- json_agg(q) as features
13
- FROM (
14
- SELECT 'Feature' as type,
15
- row_number() over() as id, st_asgeojson(
16
- st_force2d(${geometryColumn}),
17
- 6,
18
- 0
19
- ) :: json as geometry
20
- from ${table}
21
- where ${geometryColumn} is not null) q`;
22
- if (query?.sql) return selectGeom;
23
- const { rows } = await pg.query(selectGeom);
24
-
25
- return { message: rows, status: 200 };
26
-
27
- }
1
+ export default async function getLayerGeom(req) {
2
+ const { pg, params, query } = req;
3
+
4
+ const { id } = params;
5
+ if (!id) return { message: 'id is empty', status: 403 };
6
+
7
+ const selectTable = `select source_path,geometry_column from gis.services where service_id='${id}'`;
8
+ const { source_path: table, geometry_column: geometryColumn = 'geom' } = await pg.one(selectTable);
9
+ if (!table) return;
10
+ const selectGeom = `
11
+ SELECT 'FeatureCollection' As type,
12
+ json_agg(q) as features
13
+ FROM (
14
+ SELECT 'Feature' as type,
15
+ row_number() over() as id, st_asgeojson(
16
+ st_force2d(${geometryColumn}),
17
+ 6,
18
+ 0
19
+ ) :: json as geometry
20
+ from ${table}
21
+ where ${geometryColumn} is not null) q`;
22
+ if (query?.sql) return selectGeom;
23
+ const { rows } = await pg.query(selectGeom);
24
+
25
+ return { message: rows, status: 200 };
26
+
27
+ }
@@ -1,33 +1,33 @@
1
- import { metaFormat, pgClients, getTemplate } from '@opengis/fastify-table/utils.js';
2
-
3
- export default async function getServicesCol({ params = {}, pg = pgClients.client }, reply) {
4
- const row = await getTemplate('layer', params.id) || await pg.query(`
5
- SELECT
6
- service_id, source_path, attributes
7
- FROM gis.services where ${params.id ? 'service_id=$1' : '1=1'}
8
- `, [params.id].filter(Boolean)).then(el => el.rows[0] || {});
9
-
10
- if (!row.source_path) {
11
- return reply.status(404).send({ code: 404, message: 'source not found' });
12
- }
13
-
14
- const fields = await pg.query(` SELECT * FROM ${row.source_path} limit 0`).then(el => el.fields);
15
- const field = fields.find(el => el.name === params.col);
16
-
17
- if (!field) {
18
- return reply.status(404).send({ message: { error: 'column not found', fields }, code: 404 });
19
- }
20
-
21
- const rows = await pg.query(`SELECT ${params.col}::text as id, ${params.col}, count(*) FROM ${row.source_path}
22
- where ${params.col} is not null group by ${params.col} order by count(*) desc limit 10`).then(el => el.rows || []);
23
-
24
- const cls = row.attributes?.filter?.((col) => col.name && col.data && ['select', 'badge', 'tags'].includes(col.format)).reduce((acc, curr) => ({ ...acc, [curr.name]: curr.data }), {}) || {};
25
-
26
- await metaFormat({ rows, table: row.source_path, cls });
27
-
28
- const rows1 = rows.map(row => ({
29
- ...row[`${params.col}_data`], ...row, [`${params.col}_data`]: undefined, [params.col]: undefined,
30
- }));
31
-
32
- return reply.status(200).send({ rows: rows1, field, fields });
33
- }
1
+ import { metaFormat, pgClients, getTemplate } from '@opengis/fastify-table/utils.js';
2
+
3
+ export default async function getServicesCol({ params = {}, pg = pgClients.client }, reply) {
4
+ const row = await getTemplate('layer', params.id) || await pg.query(`
5
+ SELECT
6
+ service_id, source_path, attributes
7
+ FROM gis.services where ${params.id ? 'service_id=$1' : '1=1'}
8
+ `, [params.id].filter(Boolean)).then(el => el.rows[0] || {});
9
+
10
+ if (!row.source_path) {
11
+ return reply.status(404).send({ code: 404, message: 'source not found' });
12
+ }
13
+
14
+ const fields = await pg.query(` SELECT * FROM ${row.source_path} limit 0`).then(el => el.fields);
15
+ const field = fields.find(el => el.name === params.col);
16
+
17
+ if (!field) {
18
+ return reply.status(404).send({ message: { error: 'column not found', fields }, code: 404 });
19
+ }
20
+
21
+ const rows = await pg.query(`SELECT ${params.col}::text as id, ${params.col}, count(*) FROM ${row.source_path}
22
+ where ${params.col} is not null group by ${params.col} order by count(*) desc limit 10`).then(el => el.rows || []);
23
+
24
+ const cls = row.attributes?.filter?.((col) => col.name && col.data && ['select', 'badge', 'tags'].includes(col.format)).reduce((acc, curr) => ({ ...acc, [curr.name]: curr.data }), {}) || {};
25
+
26
+ await metaFormat({ rows, table: row.source_path, cls });
27
+
28
+ const rows1 = rows.map(row => ({
29
+ ...row[`${params.col}_data`], ...row, [`${params.col}_data`]: undefined, [params.col]: undefined,
30
+ }));
31
+
32
+ return reply.status(200).send({ rows: rows1, field, fields });
33
+ }