@opengis/gis 0.2.20 → 0.2.22
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/README.md +5 -5
- package/dist/index.css +1 -1
- package/dist/index.js +1691 -1663
- package/dist/index.umd.cjs +20 -20
- package/module/cls.json +6 -6
- package/module/gis/card/gis.maps.table/index.yml +14 -14
- package/module/gis/card/gis.maps.table/main_info.hbs +25 -25
- package/module/gis/card/gis.maps.table/maps_layers.hbs +19 -19
- package/module/gis/card/gis.metadata.table/index.yml +22 -22
- package/module/gis/card/gis.metadata.table/main_info.hbs +20 -20
- package/module/gis/card/gis.metadata.table/metadata_info.hbs +27 -27
- package/module/gis/card/gis.metadata.table/other.hbs +25 -25
- package/module/gis/card/gis.rasters.table/index.yml +11 -11
- package/module/gis/card/gis.rasters.table/main_info.hbs +27 -27
- package/module/gis/card/gis.registers.table/cls.hbs +36 -36
- package/module/gis/card/gis.registers.table/columns.hbs +89 -89
- package/module/gis/card/gis.registers.table/filters.hbs +80 -80
- package/module/gis/card/gis.registers.table/index.yml +23 -23
- package/module/gis/card/gis.registers.table/main_info.hbs +35 -35
- package/module/gis/card/gis.registers.table/source.hbs +45 -45
- package/module/gis/card/gis.services.table/attributes.hbs +91 -91
- package/module/gis/card/gis.services.table/filters.hbs +83 -83
- package/module/gis/card/gis.services.table/index.yml +25 -25
- package/module/gis/card/gis.services.table/main_info.hbs +27 -27
- package/module/gis/card/gis.services.table/source.hbs +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/service_type.json +42 -42
- 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/gis.cartocss.form.json +46 -0
- package/module/gis/form/gis.group_list.form.json +17 -17
- package/module/gis/form/gis.maps.form.json +64 -64
- package/module/gis/form/gis.metadata.form.json +240 -240
- package/module/gis/form/gis.ogc_service.form.json +40 -40
- package/module/gis/form/gis.rasters.form.json +99 -99
- package/module/gis/form/gis.registers.form.json +110 -110
- 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 +120 -120
- 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/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/table/gis.cartocss.table.json +61 -0
- package/module/gis/table/gis.group_list.table.json +35 -35
- package/module/gis/table/gis.maps.table.json +69 -69
- package/module/gis/table/gis.metadata.table.json +70 -70
- package/module/gis/table/gis.ogc_service.table.json +97 -97
- package/module/gis/table/gis.rasters.table.json +97 -97
- package/module/gis/table/gis.registers.table.json +79 -79
- package/module/gis/table/gis.services.table.json +99 -99
- 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/test/cls/bp_build_type.json +37 -37
- package/module/test/cls/doc_status.json +31 -31
- package/module/test/cls/ts.temp_status.json +18 -18
- package/module/test/cls/ts.temp_structure.ts_class.json +49 -49
- package/module/test/cls/ts.temp_type.json +9 -9
- package/module/test/layer/bp.json +59 -59
- package/module/test/layer/bp1.yml +33 -33
- package/module/test/layer/individual.yml +53 -53
- package/module/test/layer/ts.linking_passport.yml +55 -55
- package/module/test/layer/ts.temp_structure.yml +50 -50
- package/module/test/map/addr.yml +21 -21
- package/module/test/map/bp_myo.json +43 -43
- package/module/test/map/bpf.json +43 -43
- package/module/test/map/main.json +36 -36
- package/module/test/map/mbd.json +91 -91
- package/module/test/map/ts.json +52 -52
- package/module/test/select/address_id.json +2 -2
- package/module/test/select/address_id.sql +7 -7
- package/module/test/select/core.user_uid.sql +1 -1
- package/module/test/table/data_address.street.table.json +69 -69
- package/module/test/table/data_bp_myo.bp.table.json +122 -122
- package/package.json +69 -69
- package/plugin.js +44 -44
- package/server/migrations/maps.sql +30 -30
- package/server/migrations/ogc.sql +106 -106
- package/server/migrations/rasters.sql +263 -263
- package/server/migrations/services.sql +247 -247
- package/server/migrations/widgets.sql +20 -20
- package/server/plugins/crons.js +21 -21
- package/server/plugins/mapnik/funcs/createXML.js +72 -72
- package/server/plugins/mapnik/funcs/gdalWrapper.js +72 -72
- package/server/plugins/mapnik/funcs/map.proto +241 -241
- package/server/plugins/mapnik/funcs/mapnik.js +106 -106
- package/server/plugins/mapnik/funcs/rasterConfig.js +11 -11
- package/server/plugins/mapnik/funcs/rasterExists.js +20 -20
- package/server/plugins/mapnik/funcs/rasterInfo.js +109 -109
- package/server/plugins/mapnik/funcs/rasterVrt.js +55 -55
- package/server/plugins/mapnik/funcs/rasterXML.js +65 -65
- package/server/plugins/mapnik/funcs/rootFolder.mjs +8 -8
- package/server/plugins/mapnik/utils/map.proto +241 -241
- package/server/plugins/vite.js +74 -74
- package/server/routes/gis/dashboard.js +29 -0
- package/server/routes/gis/index.mjs +61 -59
- package/server/routes/gis/metadata/metadataXML.js +13 -13
- package/server/routes/gis/ogc/map.info.point.js +124 -124
- package/server/routes/gis/registers/add.registry.js +35 -35
- package/server/routes/gis/registers/del.registry.js +14 -14
- package/server/routes/gis/registers/funcs/classifiers.js +100 -100
- package/server/routes/gis/registers/funcs/columns.js +4 -4
- package/server/routes/gis/registers/funcs/content.type.js +9 -9
- package/server/routes/gis/registers/funcs/get.info.js +89 -89
- package/server/routes/gis/registers/funcs/handleRegistryRequest.js +133 -122
- package/server/routes/gis/registers/gis.export.js +148 -148
- package/server/routes/gis/registers/gis.registry.js +70 -38
- package/server/routes/gis/registers/gis.registry.list.js +59 -59
- package/server/routes/gis/registers/insert.columns.js +107 -107
- package/server/routes/gis/registers/insert.filters.js +110 -110
- package/server/routes/gis/registers/map.registry.js +79 -79
- package/server/routes/gis/services/add.service.js +64 -64
- package/server/routes/gis/services/del.service.js +12 -12
- package/server/routes/gis/services/get.layer.geom.js +27 -27
- package/server/routes/gis/services/get.services.col.js +33 -33
- package/server/routes/gis/services/get.services.js +84 -84
- package/server/routes/gis/services/legend.auto.js +77 -77
- package/server/routes/map/controllers/geojson.js +187 -0
- package/server/routes/map/controllers/jsonData.js +205 -0
- package/server/routes/map/controllers/layerList.js +60 -60
- package/server/routes/map/controllers/map.js +123 -123
- package/server/routes/map/controllers/mapCatalog.js +72 -72
- package/server/routes/map/controllers/mapCatalogAttribute.js +55 -55
- package/server/routes/map/controllers/mapFeatures.js +128 -128
- package/server/routes/map/controllers/mapFormat.js +83 -83
- package/server/routes/map/controllers/mapTiles.js +152 -152
- package/server/routes/map/controllers/maps.js +15 -15
- package/server/routes/map/controllers/marker_icon.js +43 -43
- package/server/routes/map/controllers/rtile.js +134 -134
- package/server/routes/map/controllers/vtile.js +172 -172
- package/server/routes/map/index.mjs +142 -129
- package/server/routes/map/maps/add.map.js +41 -41
- package/server/routes/map/maps/del.map.js +18 -18
- package/server/routes/map/maps/get.map.js +86 -86
- package/server/routes/map/vtile1.js +170 -170
- package/server/routes/map/widgets/add.widget.js +38 -38
- package/server/routes/map/widgets/del.widget.js +22 -22
- package/server/routes/map/widgets/get.widget.js +40 -40
- package/server/routes/root.mjs +3 -3
- package/utils.js +11 -11
|
@@ -1,38 +1,70 @@
|
|
|
1
|
-
import { pgClients, getTemplate } from "@opengis/fastify-table/utils.js";
|
|
2
|
-
|
|
3
|
-
import { handleRegistryRequest } from './funcs/handleRegistryRequest.js';
|
|
4
|
-
|
|
5
|
-
const maxLimit = 100;
|
|
6
|
-
const defaultLimit = 9;
|
|
7
|
-
|
|
8
|
-
export default async function gisRegistry({
|
|
9
|
-
pg = pgClients.client, params = {}, query = {},
|
|
10
|
-
}) {
|
|
11
|
-
const { slug, objectId } = params;
|
|
12
|
-
const { sql } = query;
|
|
13
|
-
|
|
14
|
-
const limit = Math.min(query.limit || defaultLimit, maxLimit);
|
|
15
|
-
const offset = query.page && query.page > 0 && !objectId ? (query.page - 1) * limit : 0;
|
|
16
|
-
|
|
17
|
-
//if (!slug) return reply.code(404).send({ message: 'Params slug is required', status: 404 });
|
|
18
|
-
if (!slug) throw new Error('Params slug is required');
|
|
19
|
-
|
|
20
|
-
const {
|
|
21
|
-
rows: [registry],
|
|
22
|
-
} = await pg.query(
|
|
23
|
-
`SELECT register_id, name, description, card, table_name,
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
1
|
+
import { pgClients, getTemplate } from "@opengis/fastify-table/utils.js";
|
|
2
|
+
|
|
3
|
+
import { handleRegistryRequest } from './funcs/handleRegistryRequest.js';
|
|
4
|
+
|
|
5
|
+
const maxLimit = 100;
|
|
6
|
+
const defaultLimit = 9;
|
|
7
|
+
|
|
8
|
+
export default async function gisRegistry({
|
|
9
|
+
pg = pgClients.client, params = {}, query = {},
|
|
10
|
+
}) {
|
|
11
|
+
const { slug, objectId } = params;
|
|
12
|
+
const { sql } = query;
|
|
13
|
+
|
|
14
|
+
const limit = Math.min(query.limit || defaultLimit, maxLimit);
|
|
15
|
+
const offset = query.page && query.page > 0 && !objectId ? (query.page - 1) * limit : 0;
|
|
16
|
+
|
|
17
|
+
//if (!slug) return reply.code(404).send({ message: 'Params slug is required', status: 404 });
|
|
18
|
+
if (!slug) throw new Error('Params slug is required');
|
|
19
|
+
|
|
20
|
+
const {
|
|
21
|
+
rows: [registry],
|
|
22
|
+
} = await pg.query(
|
|
23
|
+
`SELECT register_id, name, description, card, table_name,
|
|
24
|
+
columns, filters, query, "order", pk, register_key,
|
|
25
|
+
is_files, view, is_downloadable, is_map, is_register, service_id
|
|
26
|
+
FROM gis.registers
|
|
27
|
+
WHERE $1 in (register_key,register_id)`,
|
|
28
|
+
[slug]
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
if (registry) {
|
|
32
|
+
return handleRegistryRequest({
|
|
33
|
+
settings: registry,
|
|
34
|
+
query,
|
|
35
|
+
is_downloadable: registry.is_downloadable,
|
|
36
|
+
register_key: registry.register_key,
|
|
37
|
+
object_id: objectId,
|
|
38
|
+
is_map: registry.is_map,
|
|
39
|
+
is_register: registry.is_register,
|
|
40
|
+
is_files: registry.is_files,
|
|
41
|
+
service_id: registry.service_id,
|
|
42
|
+
offset,
|
|
43
|
+
limit,
|
|
44
|
+
page: query.page,
|
|
45
|
+
pg,
|
|
46
|
+
sql
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const registryTemplate = await getTemplate('registry', slug);
|
|
51
|
+
//if (!registryTemplate) return reply.code(404).send({ message: 'Template not found', status: 404 });
|
|
52
|
+
if (!registryTemplate) throw new Error('Template not found');
|
|
53
|
+
|
|
54
|
+
return handleRegistryRequest({
|
|
55
|
+
settings: registryTemplate,
|
|
56
|
+
query,
|
|
57
|
+
object_id: objectId,
|
|
58
|
+
register_key: registry.register_key,
|
|
59
|
+
is_downloadable: registry?.is_downloadable || registryTemplate?.is_downloadable,
|
|
60
|
+
is_map: registryTemplate.is_map,
|
|
61
|
+
is_register: registryTemplate.is_register,
|
|
62
|
+
is_files: registryTemplate.is_files,
|
|
63
|
+
service_id: registryTemplate.service_id,
|
|
64
|
+
offset,
|
|
65
|
+
limit,
|
|
66
|
+
page: query.page,
|
|
67
|
+
pg,
|
|
68
|
+
sql
|
|
69
|
+
});
|
|
70
|
+
}
|
|
@@ -1,59 +1,59 @@
|
|
|
1
|
-
import { pgClients, getTemplatePath, getTemplate } from "@opengis/fastify-table/utils.js";
|
|
2
|
-
const pg = pgClients.client;
|
|
3
|
-
|
|
4
|
-
export default async function gisRegistryList(req = {}) {
|
|
5
|
-
const { query = {} } = req;
|
|
6
|
-
const { page = 1, limit = 9, search = '' } = query;
|
|
7
|
-
const offset = limit * (page - 1);
|
|
8
|
-
|
|
9
|
-
const dbResult = await pg.query(
|
|
10
|
-
`SELECT register_key, name, description, keywords
|
|
11
|
-
FROM gis.registers
|
|
12
|
-
WHERE is_public = true AND is_active = true`
|
|
13
|
-
);
|
|
14
|
-
|
|
15
|
-
let templates = dbResult?.rows;
|
|
16
|
-
let fromDatabase = true;
|
|
17
|
-
|
|
18
|
-
if (!templates?.length) {
|
|
19
|
-
fromDatabase = false;
|
|
20
|
-
|
|
21
|
-
const registryListTemplate = await getTemplatePath('registry');
|
|
22
|
-
if (!registryListTemplate?.length) throw new Error('Templates not found');
|
|
23
|
-
|
|
24
|
-
templates = ( await Promise.all(
|
|
25
|
-
registryListTemplate.map(async ([slug]) => {
|
|
26
|
-
try {
|
|
27
|
-
const tpl = await getTemplate('registry', slug);
|
|
28
|
-
if (tpl?.visible === false) return null;
|
|
29
|
-
|
|
30
|
-
const { register_key, name, description, keywords } = tpl;
|
|
31
|
-
return { register_key, name, description, keywords };
|
|
32
|
-
} catch {
|
|
33
|
-
return null;
|
|
34
|
-
}
|
|
35
|
-
})
|
|
36
|
-
));
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const filteredBySearch = search
|
|
40
|
-
? templates.filter(tpl => {
|
|
41
|
-
const q = search.toLowerCase();
|
|
42
|
-
return (
|
|
43
|
-
tpl.name?.toLowerCase().includes(q) ||
|
|
44
|
-
tpl.description?.toLowerCase().includes(q) ||
|
|
45
|
-
tpl.keywords?.join(' ').toLowerCase().includes(q)
|
|
46
|
-
);
|
|
47
|
-
})
|
|
48
|
-
: templates;
|
|
49
|
-
|
|
50
|
-
const paged = filteredBySearch.slice(offset, offset + limit);
|
|
51
|
-
|
|
52
|
-
return {
|
|
53
|
-
rows: paged,
|
|
54
|
-
total: filteredBySearch.length,
|
|
55
|
-
page: parseInt(page, 10),
|
|
56
|
-
limit: parseInt(limit, 10),
|
|
57
|
-
offset
|
|
58
|
-
};
|
|
59
|
-
}
|
|
1
|
+
import { pgClients, getTemplatePath, getTemplate } from "@opengis/fastify-table/utils.js";
|
|
2
|
+
const pg = pgClients.client;
|
|
3
|
+
|
|
4
|
+
export default async function gisRegistryList(req = {}) {
|
|
5
|
+
const { query = {} } = req;
|
|
6
|
+
const { page = 1, limit = 9, search = '' } = query;
|
|
7
|
+
const offset = limit * (page - 1);
|
|
8
|
+
|
|
9
|
+
const dbResult = await pg.query(
|
|
10
|
+
`SELECT register_key, name, description, keywords
|
|
11
|
+
FROM gis.registers
|
|
12
|
+
WHERE is_public = true AND is_active = true`
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
let templates = dbResult?.rows;
|
|
16
|
+
let fromDatabase = true;
|
|
17
|
+
|
|
18
|
+
if (!templates?.length) {
|
|
19
|
+
fromDatabase = false;
|
|
20
|
+
|
|
21
|
+
const registryListTemplate = await getTemplatePath('registry');
|
|
22
|
+
if (!registryListTemplate?.length) throw new Error('Templates not found');
|
|
23
|
+
|
|
24
|
+
templates = ( await Promise.all(
|
|
25
|
+
registryListTemplate.map(async ([slug]) => {
|
|
26
|
+
try {
|
|
27
|
+
const tpl = await getTemplate('registry', slug);
|
|
28
|
+
if (tpl?.visible === false) return null;
|
|
29
|
+
|
|
30
|
+
const { register_key, name, description, keywords } = tpl;
|
|
31
|
+
return { register_key, name, description, keywords };
|
|
32
|
+
} catch {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
})
|
|
36
|
+
));
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const filteredBySearch = search
|
|
40
|
+
? templates.filter(tpl => {
|
|
41
|
+
const q = search.toLowerCase();
|
|
42
|
+
return (
|
|
43
|
+
tpl.name?.toLowerCase().includes(q) ||
|
|
44
|
+
tpl.description?.toLowerCase().includes(q) ||
|
|
45
|
+
tpl.keywords?.join(' ').toLowerCase().includes(q)
|
|
46
|
+
);
|
|
47
|
+
})
|
|
48
|
+
: templates;
|
|
49
|
+
|
|
50
|
+
const paged = filteredBySearch.slice(offset, offset + limit);
|
|
51
|
+
|
|
52
|
+
return {
|
|
53
|
+
rows: paged,
|
|
54
|
+
total: filteredBySearch.length,
|
|
55
|
+
page: parseInt(page, 10),
|
|
56
|
+
limit: parseInt(limit, 10),
|
|
57
|
+
offset
|
|
58
|
+
};
|
|
59
|
+
}
|
|
@@ -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
|
+
}
|