@opengis/gis 0.2.22 → 0.2.25

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.
@@ -16,65 +16,128 @@
16
16
  "order": "created_at desc",
17
17
  "meta": {
18
18
  "title": "name",
19
- "search": "name,description"
19
+ "search": "name,description,holder,register_key,keywords_text"
20
20
  },
21
+ "sql": [
22
+ {
23
+ "name": "group_id_sql",
24
+ "sql": "select group_id,geom_type,st_asgeojson(bbox) as bbox from gis.services where service_id=t.service_id limit 1"
25
+ },
26
+ {
27
+ "sql": "select array_to_string(keywords, ',','') as keywords_text",
28
+ "name": "keywords_text_sql"
29
+ }
30
+ ],
21
31
  "title": "Реєстри",
22
32
  "form": "gis.registers.form",
33
+ "sqlColumns": "*",
23
34
  "columns": [
24
35
  {
25
36
  "ua": "Назва",
26
37
  "meta": "title",
27
38
  "name": "name",
28
39
  "link": "/registry/{id}",
29
- "format": "text"
40
+ "format": "slot",
41
+ "slot": "<a href='/registry/{id}'><p>{{data?.name}}</p><p class='text-xs text-gray-500'>{{data?.description}}</p></a>"
30
42
  },
31
43
  {
32
- "ua": "Опис",
33
- "width": 300,
34
- "name": "description",
35
- "format": "text"
44
+ "ua": "Група сервісу",
45
+ "name": "group_id",
46
+ "data": "gis.group_list",
47
+ "format": "badge"
36
48
  },
37
49
  {
38
- "ua": "Фото",
39
- "name": "image",
40
- "format": "slot",
41
- "hidden":true,
42
- "slot": "<img alt=\"image\" :src=\"data?.image\" class=\"h-32 rounded-lg\" />"
50
+ "ua": "Шар на мапі",
51
+ "data": "service_id",
52
+ "name": "service_id",
53
+ "format": "select",
54
+ "hidden": true
43
55
  },
44
56
  {
45
57
  "ua": "Ключові слова",
46
58
  "name": "keywords",
47
- "format": "slot",
48
- "slot": {
49
- "content": "<div v-for=\"(tag,index) in data?.keywords\" :key=\"index\"><span class=\"bg-gray-200 px-1 py-0.5 rounded-lg\">{{tag}}</span></div>"
50
- }
59
+ "format": "text",
60
+ "hidden": true
51
61
  },
52
62
  {
53
63
  "ua": "Держатель",
54
64
  "name": "holder",
55
- "format": "text"
65
+ "format": "text",
66
+ "hidden": true
67
+ },
68
+ {
69
+ "ua": "Таблиця в базі даних",
70
+ "name": "table_name",
71
+ "format": "text",
72
+ "width": 350
73
+ },
74
+ {
75
+ "ua": "Публічний",
76
+ "name": "is_public",
77
+ "data": "yes_no",
78
+ "edit": true,
79
+ "width": 100,
80
+ "format": "boolean"
81
+ },
82
+ {
83
+ "ua": "Активний",
84
+ "name": "is_active",
85
+ "data": "yes_no",
86
+ "edit": true,
87
+ "width": 100,
88
+ "format": "boolean"
89
+ },
90
+ {
91
+ "ua": "Можна завантажити",
92
+ "name": "is_downloadable",
93
+ "data": "yes_no",
94
+ "edit": true,
95
+ "width": 180,
96
+ "format": "boolean",
97
+ "hidden": true
56
98
  }
57
99
  ],
58
100
  "filterList": [
59
101
  {
60
- "ua": "Назва",
61
- "name": "name",
102
+ "ua": "Ключові слова",
103
+ "name": "keywords_text",
62
104
  "type": "Text"
63
105
  },
64
106
  {
65
- "ua": "Опис",
66
- "name": "description",
67
- "type": "Text"
107
+ "ua": "Таблиця в базі даних",
108
+ "name": "table_name",
109
+ "data": "pg.table_name",
110
+ "type": "Autocomplete"
68
111
  },
69
112
  {
70
- "ua": "Ключові слова",
71
- "name": "keywords",
72
- "type": "Text"
113
+ "ua": "Група сервісу",
114
+ "type": "Check",
115
+ "name": "group_id",
116
+ "data": "gis.group_list"
73
117
  },
74
118
  {
75
- "ua": "Держатель",
76
- "name": "holder",
77
- "type": "Text"
119
+ "ua": "Тип геометрії",
120
+ "type": "Check",
121
+ "name": "geom_type",
122
+ "data": "geom_type"
123
+ },
124
+ {
125
+ "ua": "Публічний",
126
+ "name": "is_public",
127
+ "data": "yes_no",
128
+ "type": "Check"
129
+ },
130
+ {
131
+ "ua": "Активний",
132
+ "name": "is_active",
133
+ "data": "yes_no",
134
+ "type": "Check"
135
+ },
136
+ {
137
+ "ua": "Можна завантажити",
138
+ "name": "is_downloadable",
139
+ "data": "yes_no",
140
+ "type": "Check"
78
141
  }
79
142
  ]
80
143
  }
@@ -13,11 +13,17 @@
13
13
  "add"
14
14
  ],
15
15
  "access": "user",
16
- "order": "created_by desc",
16
+ "order": "created_at desc",
17
17
  "meta": {
18
18
  "title": "name",
19
- "search": "name,description,source_path"
19
+ "search": "name,description,source_path,keywords_text,holder,service_key"
20
20
  },
21
+ "sql": [
22
+ {
23
+ "sql": "select array_to_string(keywords, ',','') as keywords_text",
24
+ "name": "keywords_text_sql"
25
+ }
26
+ ],
21
27
  "title": "Набори даних",
22
28
  "form": "gis.services.form",
23
29
  "sqlColumns": "*",
@@ -27,48 +33,31 @@
27
33
  "meta": "title",
28
34
  "name": "name",
29
35
  "link": "/service/{id}",
30
- "width": 200,
31
- "format": "text"
32
- },
33
- {
34
- "ua": "Опис",
35
- "name": "description",
36
- "edit":true,
37
- "width": 300,
38
- "format": "text"
39
-
36
+ "format": "slot",
37
+ "slot": "<a href='/service/{id}'><p>{{data?.name}}</p><p class='text-xs text-gray-500'>{{data?.description}}</p></a>"
40
38
  },
41
39
  {
42
40
  "ua": "Група",
43
41
  "name": "group_id",
44
- "width": 220,
45
- "edit":true,
46
42
  "data": "gis.group_list",
47
43
  "format": "badge"
48
44
  },
49
45
  {
50
46
  "ua": "Ключові слова",
51
47
  "name": "keywords",
52
- "format": "slot",
53
- "hidden" :true,
54
- "slot": {
55
- "content": "<div v-for=\"(tag,index) in data?.keywords\" :key=\"index\"><span class=\"bg-gray-200 px-1 py-0.5 rounded-lg\">{{tag}}</span></div>"
56
- }
48
+ "hidden": true,
49
+ "format": "text"
57
50
  },
58
51
  {
59
52
  "ua": "Джерело",
60
- "name": "source_type",
61
- "format": "slot",
62
- "hidden" :true,
63
- "width": 270,
64
- "slot": {
65
- "content": "<div><span v-if=\"data?.source_type==='url'\"><a :href=\"data?.service_url\" class=\"text-blue-500\">{{data?.service_url}}</a></span><span v-else-if=\"data?.source_type==='database'\">{{data?.source_path}}</span></div>"
66
- }
53
+ "name": "source_path",
54
+ "width": 350,
55
+ "format": "text"
67
56
  },
68
57
  {
69
58
  "ua": "Публічний",
70
- "name": "is_public",
71
- "edit":true,
59
+ "name": "is_public",
60
+ "edit": true,
72
61
  "width": 100,
73
62
  "format": "boolean"
74
63
  },
@@ -76,7 +65,7 @@
76
65
  "ua": "Активний",
77
66
  "name": "is_active",
78
67
  "data": "yes_no",
79
- "edit":true,
68
+ "edit": true,
80
69
  "width": 100,
81
70
  "format": "boolean"
82
71
  },
@@ -84,16 +73,46 @@
84
73
  "ua": "Можна завантажити",
85
74
  "name": "is_downloadable",
86
75
  "data": "yes_no",
87
- "edit":true,
76
+ "hidden": true,
77
+ "edit": true,
88
78
  "width": 180,
89
79
  "format": "boolean"
90
80
  }
91
81
  ],
92
82
  "filterList": [
93
83
  {
94
- "ua": "Тип набору",
95
- "name": "service_type",
96
- "data": "service_type",
84
+ "ua": "Ключові слова",
85
+ "name": "keywords_text",
86
+ "type": "Text"
87
+ },
88
+ {
89
+ "ua": "Група",
90
+ "name": "group_id",
91
+ "data": "gis.group_list",
92
+ "type": "Check"
93
+ },
94
+ {
95
+ "ua": "Джерело",
96
+ "name": "source_path",
97
+ "data": "pg.table_name",
98
+ "type": "Autocomplete"
99
+ },
100
+ {
101
+ "ua": "Публічний",
102
+ "name": "is_public",
103
+ "data": "yes_no",
104
+ "type": "Check"
105
+ },
106
+ {
107
+ "ua": "Активний",
108
+ "name": "is_active",
109
+ "data": "yes_no",
110
+ "type": "Check"
111
+ },
112
+ {
113
+ "ua": "Можна завантажити",
114
+ "name": "is_downloadable",
115
+ "data": "yes_no",
97
116
  "type": "Check"
98
117
  }
99
118
  ]
package/package.json CHANGED
@@ -1,69 +1,73 @@
1
- {
2
- "name": "@opengis/gis",
3
- "version": "0.2.22",
4
- "type": "module",
5
- "author": "Softpro",
6
- "main": "./dist/index.js",
7
- "files": [
8
- "dist/*",
9
- "module/*",
10
- "server/*",
11
- "plugin.js",
12
- "utils.js",
13
- "config.js",
14
- "README.md",
15
- "LICENSE"
16
- ],
17
- "scripts": {
18
- "dump": "bun ./node_modules/@opengis/fastify-table/dist/script/dump.js",
19
- "migrate": "MIGRATE=true bun ./node_modules/@opengis/fastify-table/dist/script/migrate.js",
20
- "start1": "bun server",
21
- "lint": "eslint src --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts",
22
- "fix": "eslint src --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix",
23
- "patch": "npm version patch && git push && npm publish",
24
- "dev": "bun --hot server",
25
- "front": "vite dev",
26
- "build-lib": "vite build",
27
- "build:admin": "vite build admin",
28
- "build": "vite build",
29
- "preview": "vite preview",
30
- "prod": "NODE_ENV=production node server",
31
- "docs:install": "npm install --prefix ./docs",
32
- "docs:dev": "npm run --prefix ./docs docs:dev",
33
- "docs:build": "npm run --prefix ./docs docs:build",
34
- "docs:preview": "npm run --prefix ./docs docs:preview",
35
- "prepublishOnly": "npm run build"
36
- },
37
- "dependencies": {
38
- "@mapbox/sphericalmercator": "1.2.0",
39
- "carto": "0.16.3"
40
- },
41
- "peerDependencies": {
42
- "@opengis/fastify-table": "^2.0.32"
43
- },
44
- "resolutions": {
45
- "rollup": "4.30.0"
46
- },
47
- "devDependencies": {
48
- "@opengis/core": "^0.0.23",
49
- "@opengis/fastify-table": "^2.0.114",
50
- "@opengis/filter": "^0.1.25",
51
- "@opengis/form": "^0.0.91",
52
- "@opengis/table": "^0.0.27",
53
- "@vitejs/plugin-vue": "^5.2.3",
54
- "axios": "^1.11.0",
55
- "eslint": "^8.57.1",
56
- "eslint-config-airbnb": "19.0.4",
57
- "eslint-plugin-import": "^2.25.3",
58
- "eslint-plugin-vue": "^9.17.0",
59
- "@vue/eslint-config-typescript": "^12.0.0",
60
- "vue-eslint-parser": "^10.2.0",
61
- "lucide-vue-next": "^0.514.0",
62
- "sass-embedded": "1.86.3",
63
- "typescript": "^5.9.2",
64
- "vite": "^6.3.5",
65
- "vue": "^3.5.13",
66
- "vue-router": "4.5.1",
67
- "vuedraggable": "^4.1.0"
68
- }
1
+ {
2
+ "name": "@opengis/gis",
3
+ "version": "0.2.25",
4
+ "type": "module",
5
+ "author": "Softpro",
6
+ "main": "./dist/index.js",
7
+ "files": [
8
+ "dist/*",
9
+ "module/*",
10
+ "server/*",
11
+ "plugin.js",
12
+ "utils.js",
13
+ "config.js",
14
+ "README.md",
15
+ "LICENSE"
16
+ ],
17
+ "scripts": {
18
+ "dump": "bun ./node_modules/@opengis/fastify-table/dist/script/dump.js",
19
+ "migrate": "MIGRATE=true bun ./node_modules/@opengis/fastify-table/dist/script/migrate.js",
20
+ "start1": "bun server",
21
+ "start:kamyanske": "bun --env-file=.env.kamyanske server",
22
+ "start:kr": "bun --env-file=.env.kr server",
23
+ "dev:kamyanske": "bun --env-file=.env.kamyanske --hot server",
24
+ "dev:kr": "bun --env-file=.env.kr --hot server",
25
+ "lint": "eslint src --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts",
26
+ "fix": "eslint src --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix",
27
+ "patch": "npm version patch && git push && npm publish",
28
+ "dev": "bun --hot server",
29
+ "front": "vite dev",
30
+ "build-lib": "vite build",
31
+ "build:admin": "vite build admin",
32
+ "build": "vite build",
33
+ "preview": "vite preview",
34
+ "prod": "NODE_ENV=production node server",
35
+ "docs:install": "npm install --prefix ./docs",
36
+ "docs:dev": "npm run --prefix ./docs docs:dev",
37
+ "docs:build": "npm run --prefix ./docs docs:build",
38
+ "docs:preview": "npm run --prefix ./docs docs:preview",
39
+ "prepublishOnly": "npm run build"
40
+ },
41
+ "dependencies": {
42
+ "@mapbox/sphericalmercator": "1.2.0",
43
+ "carto": "0.16.3"
44
+ },
45
+ "peerDependencies": {
46
+ "@opengis/fastify-table": "^2.0.32"
47
+ },
48
+ "resolutions": {
49
+ "rollup": "4.30.0"
50
+ },
51
+ "devDependencies": {
52
+ "@opengis/core": "^0.0.23",
53
+ "@opengis/fastify-table": "^2.0.117",
54
+ "@opengis/filter": "^0.1.27",
55
+ "@opengis/form": "^0.0.91",
56
+ "@opengis/table": "^0.0.27",
57
+ "@vitejs/plugin-vue": "^5.2.4",
58
+ "axios": "^1.13.2",
59
+ "eslint": "^8.57.1",
60
+ "eslint-config-airbnb": "19.0.4",
61
+ "eslint-plugin-import": "^2.32.0",
62
+ "eslint-plugin-vue": "^9.33.0",
63
+ "@vue/eslint-config-typescript": "^12.0.0",
64
+ "vue-eslint-parser": "^10.2.0",
65
+ "lucide-vue-next": "^0.514.0",
66
+ "sass-embedded": "1.86.3",
67
+ "typescript": "^5.9.3",
68
+ "vite": "^6.4.1",
69
+ "vue": "^3.5.26",
70
+ "vue-router": "4.5.1",
71
+ "vuedraggable": "^4.1.0"
72
+ }
69
73
  }
@@ -0,0 +1,18 @@
1
+ export default async function addCartocss(req, reply) {
2
+ const { pg, body, params } = req;
3
+
4
+ const { id } = params;
5
+ if (!id) return reply.status(400).send({ message: 'id is empty', status: 400 });
6
+
7
+ const { config, style } = body;
8
+ if (!config && !style) return reply.status(400).send({ message: 'config, style is empty', status: 400 });
9
+
10
+ const selectCartocss = `select cartocss_id from gis.cartocss where cartocss_id='${id}'`;
11
+ const { cartocss } = await pg.one(selectCartocss);
12
+ if (!cartocss) return reply.status(404).send({ message: 'cartocss not found', status: 404 });
13
+
14
+ const updateCartocss = `update gis.cartocss set config='${config}', style='${style}' where cartocss_id='${id}'`;
15
+ await pg.query(updateCartocss);
16
+
17
+ return reply.status(200).send({ message: 'cartocss updated', status: 200 });
18
+ }
@@ -0,0 +1,12 @@
1
+ export default async function getCartocss(req, reply) {
2
+ const { pg, params } = req;
3
+
4
+ const { id } = params;
5
+ if (!id) return reply.status(400).send({ message: 'id is empty', status: 400 });
6
+
7
+ const selectCartocss = `select cartocss_key,name,description,config,style,group_id,is_public,enabled from gis.cartocss where cartocss_id='${id}'`;
8
+ const { cartocss } = await pg.one(selectCartocss);
9
+ if (!cartocss) return reply.status(404).send({ message: 'cartocss not found', status: 404 });
10
+
11
+ return reply.status(200).send({ message: cartocss, status: 200 });
12
+ }
@@ -1,11 +1,14 @@
1
1
  import insertColumns from './registers/insert.columns.js';
2
2
  import insertFilters from './registers/insert.filters.js';
3
+
3
4
  import metadataXML from './metadata/metadataXML.js';
5
+
4
6
  import getLayerGeom from './services/get.layer.geom.js';
5
7
  import gisRegistry from './registers/gis.registry.js';
6
8
  import gisRegistryList from './registers/gis.registry.list.js';
7
9
  import mapRegistry from './registers/map.registry.js';
8
10
  import gisExport from './registers/gis.export.js';
11
+
9
12
  import getServices from './services/get.services.js';
10
13
  import deleteService from './services/del.service.js';
11
14
  import addService from './services/add.service.js';
@@ -17,6 +20,9 @@ import legendAuto from './services/legend.auto.js';
17
20
  import mapInfoPoint from './ogc/map.info.point.js';
18
21
  import getDashboard from './dashboard.js';
19
22
 
23
+ import getCartocss from './cartocss/get.cartocss.js';
24
+ import addCartocss from './cartocss/add.cartocss.js';
25
+
20
26
  const mapInfoPointSchema = {
21
27
  querystring: {
22
28
  type: 'object',
@@ -30,32 +36,38 @@ const mapInfoPointSchema = {
30
36
  },
31
37
  };
32
38
 
39
+ const params = { config: { package: 'gis' } };
40
+ const publicParams = { config: { policy: 'L0', package: 'gis' } };
41
+
33
42
  async function route(app) {
34
- app.put('/insert-columns/:token', insertColumns);
35
- app.put('/insert-filters/:token', insertFilters);
36
- app.get('/gis-registry/:slug', { config: { policy: ['public'] } }, gisRegistry);
37
- app.get('/gis-registry/:slug/:objectId', { config: { policy: ['public'] } }, gisRegistry);
38
- app.get('/gis-registry', { config: { policy: ['public'] } }, gisRegistryList);
39
- app.post('/gis-registry', { config: { policy: ['public'] } }, addGisRegistry);
40
- app.put('/gis-registry/:slug', { config: { policy: ['public'] } }, addGisRegistry);
41
- app.delete('/gis-registry/:slug', { config: { policy: ['public'] } }, deleteGisRegistry);
42
- app.get('/map-registry/:slug/:id', { config: { policy: ['public'] } }, mapRegistry);
43
+ app.put('/insert-columns/:token', params, insertColumns);
44
+ app.put('/insert-filters/:token', params, insertFilters);
45
+ app.get('/gis-registry/:slug', publicParams, gisRegistry);
46
+ app.get('/gis-registry/:slug/:objectId', publicParams, gisRegistry);
47
+ app.get('/gis-registry', publicParams, gisRegistryList);
48
+ app.post('/gis-registry', publicParams, addGisRegistry);
49
+ app.put('/gis-registry/:slug', publicParams, addGisRegistry);
50
+ app.delete('/gis-registry/:slug', publicParams, deleteGisRegistry);
51
+ app.get('/map-registry/:slug/:id', publicParams, mapRegistry);
52
+
53
+ app.get('/xml/:id', publicParams, metadataXML);
43
54
 
44
- app.get('/xml/:id', { config: { policy: ['public'] } }, metadataXML);
55
+ app.get('/get-layer-geom/:id', publicParams, getLayerGeom);
45
56
 
46
- app.get('/get-layer-geom/:id', { config: { policy: ['public'] } }, getLayerGeom);
57
+ app.get('/gis-export/:type/:slug', publicParams, gisExport);
47
58
 
48
- app.get('/gis-export/:type/:slug', { config: { policy: ['public'] } }, gisExport);
59
+ app.get('/gis-service/:id?', publicParams, getServices);
60
+ app.get('/gis-service/:id/:col', publicParams, getServicesCol);
61
+ app.post('/gis-service/:id?', publicParams, addService);
62
+ app.put('/gis-service/:id', publicParams, addService);
63
+ app.delete('/gis-service/:id', publicParams, deleteService);
64
+ app.get('/legend-auto/:id', publicParams, legendAuto);
49
65
 
50
- app.get('/gis-service/:id?', { config: { policy: ['public'] } }, getServices);
51
- app.get('/gis-service/:id/:col', { config: { policy: ['public'] } }, getServicesCol);
52
- app.post('/gis-service/:id?', { config: { policy: ['public'] } }, addService);
53
- app.put('/gis-service/:id', { config: { policy: ['public'] } }, addService);
54
- app.delete('/gis-service/:id', { config: { policy: ['public'] } }, deleteService);
55
- app.get('/legend-auto/:id', { config: { policy: ['public'] } }, legendAuto);
66
+ app.get('/map-info-point', { ...publicParams, schema: mapInfoPointSchema }, mapInfoPoint);
56
67
 
57
- app.get('/map-info-point', { config: { policy: ['public'] }, schema: mapInfoPointSchema }, mapInfoPoint);
68
+ app.get('/dashboard', publicParams, getDashboard);
58
69
 
59
- app.get('/dashboard', { config: { policy: ['public'] } }, getDashboard);
70
+ app.get('/cartocss/:id', publicParams, getCartocss);
71
+ app.post('/cartocss/:id', publicParams, addCartocss);
60
72
  }
61
73
  export default route;
@@ -47,8 +47,8 @@ const schemaInfo = {
47
47
  },
48
48
  };
49
49
 
50
- const publicParams = { config: { policy: 'L0' }, schema: schemaInfo }; // * L0 === public
51
- const privilegedParams = { config: { policy: 'L1', role: 'admin' }, schema: schemaInfo }; // ? just auth or admin
50
+ const publicParams = { config: { policy: 'L0' }, schema: schemaInfo, package: 'gis' }; // * L0 === public
51
+ const privilegedParams = { config: { policy: 'L1', role: 'admin' }, schema: schemaInfo, package: 'gis' }; // ? just auth or admin
52
52
 
53
53
  export default async function route(app) {
54
54
  if (!app.hasRoute({ method: 'GET', url: '/gis-map/:id?' })) {