@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.
Files changed (63) hide show
  1. package/dist/index.css +1 -1
  2. package/module/gis/card/gis.metadata.table/index.yml +22 -22
  3. package/module/gis/card/gis.rasters.table/index.yml +11 -11
  4. package/module/gis/card/gis.registers.table/index.yml +23 -23
  5. package/module/gis/card/gis.services.table/index.yml +25 -25
  6. package/module/gis/cls/bool.yes_no.json +12 -12
  7. package/module/gis/cls/encoding.json +14 -14
  8. package/module/gis/cls/geom_type.json +14 -14
  9. package/module/gis/cls/gis.column_type.json +34 -34
  10. package/module/gis/cls/gis.column_view_type.json +26 -26
  11. package/module/gis/cls/gis.filter_type.json +22 -22
  12. package/module/gis/cls/language.json +10 -10
  13. package/module/gis/cls/meta.service_type.json +42 -42
  14. package/module/gis/cls/ogc.service.json +21 -21
  15. package/module/gis/cls/source_type.json +10 -10
  16. package/module/gis/cls/standarts.json +6 -6
  17. package/module/gis/cls/topic_category.json +106 -106
  18. package/module/gis/cls/update_frequency.json +29 -29
  19. package/module/gis/cls/view.json +21 -21
  20. package/module/gis/form/feedback.answer.form.json +10 -10
  21. package/module/gis/form/gis.cartocss.form.json +64 -64
  22. package/module/gis/form/gis.group_list.form.json +17 -17
  23. package/module/gis/form/gis.maps.form.json +61 -61
  24. package/module/gis/form/gis.metadata.form.json +240 -240
  25. package/module/gis/form/gis.metadata_new.form.json +195 -195
  26. package/module/gis/form/gis.ogc_service.form.json +51 -51
  27. package/module/gis/form/gis.rasters.form.json +76 -76
  28. package/module/gis/form/gis.registers_column.form.json +84 -84
  29. package/module/gis/form/gis.registers_filter.form.json +65 -65
  30. package/module/gis/form/gis.services.form.json +111 -111
  31. package/module/gis/form/gis.services_attributes.form.json +75 -75
  32. package/module/gis/form/gis.services_filter.form.json +65 -65
  33. package/module/gis/menu.json +43 -43
  34. package/module/gis/select/admin.cls.name.sql +9 -9
  35. package/module/gis/select/layer_list.sql +7 -7
  36. package/module/gis/select/layer_list_text.sql +7 -7
  37. package/module/gis/select/pg.column_name.geometry.sql +12 -12
  38. package/module/gis/select/pg.columns.parent.sql +6 -6
  39. package/module/gis/select/pg.table_name.sql +17 -17
  40. package/module/gis/select/service_id.sql +1 -1
  41. package/module/gis/select/srid.sql +7 -7
  42. package/module/gis/table/gis.cartocss.table.json +74 -74
  43. package/module/gis/table/gis.group_list.table.json +58 -58
  44. package/module/gis/table/gis.maps.table.json +110 -110
  45. package/module/gis/table/gis.metadata.table.json +70 -70
  46. package/module/gis/table/gis.metadata_new.table.json +137 -137
  47. package/module/gis/table/gis.ogc_service.table.json +100 -100
  48. package/module/gis/table/gis.rasters.table.json +113 -113
  49. package/module/gis/table/gis.registers.table.json +143 -143
  50. package/module/gis/table/gis.services.table.json +120 -120
  51. package/module/gis/table/site.gis.registers.table.json +88 -88
  52. package/module/gis/table/site.gis.services.table.json +106 -106
  53. package/module/gis/templates/ISO19136_2017_gml_template.xml +330 -330
  54. package/module/gis/tokens.yml +5 -5
  55. package/module/permissions/form/permissions.users.form.json +151 -151
  56. package/module/permissions/table/gis.permissions.table.json +97 -97
  57. package/package.json +1 -1
  58. package/server/routes/registers/functions/getTableColumnMeta.js +6 -6
  59. package/server/routes/registers/functions/gis.suggest.js +22 -14
  60. package/server/routes/registers/functions/handleRegistryRequest.js +3 -2
  61. package/server/routes/registers/registers.route.test.js +1 -1
  62. package/server/routes/services/functions/get.services.js +34 -4
  63. package/server/routes/services/services.route.test.js +4 -0
@@ -136,7 +136,7 @@ describe('GIS routes', () => {
136
136
  const { table, filter } = await pg.query('select table_name as table, filters->0->>\'name\' as filter from gis.registers where register_id=$1', [testId]).then((r) => r.rows[0]);
137
137
  expect(filter).toBeTypeOf('string');
138
138
  const hash = 'unit-test';
139
- const redisKey = `${pg.options.database}:registry-filter:${hash}`;
139
+ const redisKey = `${pg.options.database}:gis-suggest-filter:${hash}`;
140
140
  await rclient.set(redisKey, JSON.stringify({ register: testId, filter }), 'EX', 1 * 60);
141
141
  const res = await injectWithHeaders({
142
142
  method: 'GET',
@@ -1,6 +1,9 @@
1
+ import { createHash } from 'node:crypto';
2
+
1
3
  import { NotFoundError } from '@opengis/fastify-table/errors.js';
2
4
  import {
3
- dataUpdate, getMeta, pgClients, yml2json, getTemplate,
5
+ dataUpdate, getMeta, pgClients, yml2json,
6
+ getTemplate, getSelect, getRedis
4
7
  } from '@opengis/fastify-table/utils.js';
5
8
 
6
9
  const columnType = {
@@ -13,6 +16,8 @@ const columnType = {
13
16
  'timestamp with time zone': 'date',
14
17
  };
15
18
 
19
+ const rclient = getRedis();
20
+
16
21
  export default async function getServices({ id }, pg = pgClients.client) {
17
22
  const t = await getTemplate('layer', id);
18
23
  if (t) return t;
@@ -79,9 +84,34 @@ export default async function getServices({ id }, pg = pgClients.client) {
79
84
  ?.split?.(','),
80
85
  }));
81
86
 
82
- rows.filter(row => row.filters).forEach(row => Object.assign(row, {
83
- filters: row.filters.map(filter => ({ ...filter, api: `/api/suggest/${row.source_path}:${filter.name}${filter.data && filter.name !== filter.data ? `?sel=${filter.data}` : ''}` })),
84
- }));
87
+
88
+ if (id && rows.length && rows[0].filters) {
89
+ const activeFilters = await Promise.all((rows[0].filters || []).filter((f) => f.disabled !== true).map(async (el) => {
90
+ const hash = createHash('md5').update([id, el.name, el.data].filter(Boolean).join('-')).digest('hex');
91
+ const redisKey = `${pg?.options?.database}:gis-suggest-filter:${hash}`;
92
+
93
+ const cls = el.data ? await getSelect(el.data, pg) : undefined;
94
+ const { arr, sql } = cls || {};
95
+
96
+ const r = {
97
+ ...el, id: el.name || el.id, type: el.type, api: `/api/gis-suggest/${hash}`, options: arr, select: sql
98
+ };
99
+
100
+ const unique = await rclient.setnx(redisKey, 1);
101
+ const ttl = await rclient.ttl(redisKey);
102
+
103
+ // skip subsequent calls
104
+ if (!unique && ttl !== -1) {
105
+ return r;
106
+ }
107
+
108
+ await rclient.set(redisKey, JSON.stringify({ service: id, filter: el.name }), 'EX', 15 * 60);
109
+ return r;
110
+ }));
111
+ Object.assign(rows[0], {
112
+ filters: activeFilters,
113
+ });
114
+ }
85
115
 
86
116
  if (id) {
87
117
  return { ...rows[0], fields };
@@ -49,6 +49,10 @@ describe('GIS routes', () => {
49
49
  expect(res1.body).toHaveProperty('service_id');
50
50
  expect(res1.body).toHaveProperty('name');
51
51
  expect(res1.body).toHaveProperty('service_key');
52
+ expect(res1.body).toHaveProperty('filters');
53
+ expect(res1.body.filters.length).toBeGreaterThan(0);
54
+ expect(res1.body.filters[0]).toHaveProperty('api');
55
+ expect(res1.body.filters[0].api).toMatch('/gis-suggest/');
52
56
 
53
57
  const res2 = await injectWithHeaders({
54
58
  url: `/api/gis-service/${res.body.rows[0].service_id}/${res.body.fields[0].name}`,