@opengis/admin 0.1.81 → 0.1.83

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 (142) hide show
  1. package/README.md +29 -29
  2. package/config.js +4 -4
  3. package/dist/{IconChevronDown-D5JGurpf.js → IconChevronDown-B7bJL5rk.js} +1 -1
  4. package/dist/{add-page-DjmhHq_I.js → add-page-D5TrUydC.js} +1 -1
  5. package/dist/{admin-interface-CIA9Y-Dz.js → admin-interface-Cv1M1Cmt.js} +370 -352
  6. package/dist/{admin-view-DABvcRfg.js → admin-view-vVXbKHih.js} +45 -45
  7. package/dist/admin.js +1 -1
  8. package/dist/admin.umd.cjs +63 -61
  9. package/dist/assets/logo.svg +41 -41
  10. package/dist/{card-page-B_Vr2qvx.js → card-page-BbP6doYG.js} +146 -126
  11. package/dist/{card-view-XmNFtrP8.js → card-view-C2YWCaFs.js} +1 -1
  12. package/dist/{edit-page-ELlQWVFa.js → edit-page-BRKTh4MZ.js} +1 -1
  13. package/dist/{import-file-CsnR0UjH.js → import-file-DA-DiiaH.js} +6024 -5941
  14. package/dist/style.css +1 -1
  15. package/module/settings/card/admin.roles.table/access.hbs +27 -27
  16. package/module/settings/card/admin.roles.table/general_info.hbs +16 -16
  17. package/module/settings/card/admin.roles.table/index.yml +14 -14
  18. package/module/settings/card/admin.roles.table/users.hbs +27 -27
  19. package/module/settings/card/admin.routes.table/general_info.hbs +40 -40
  20. package/module/settings/card/admin.routes.table/index.yml +8 -8
  21. package/module/settings/card/admin.routes.table/users.hbs +33 -33
  22. package/module/settings/card/admin.users.table/general_info.hbs +25 -25
  23. package/module/settings/card/admin.users.table/index.yml +12 -12
  24. package/module/settings/card/admin.users.table/logs.hbs +30 -30
  25. package/module/settings/card/admin.users.table/user_roles.hbs +24 -24
  26. package/module/settings/cls/core.actions.json +17 -13
  27. package/module/settings/cls/core.scope.json +13 -13
  28. package/module/settings/cls/properties.site_status.json +13 -13
  29. package/module/settings/cls/properties.widget_status.json +13 -13
  30. package/module/settings/cls/users.user_type.json +13 -13
  31. package/module/settings/form/admin.access.form.json +36 -36
  32. package/module/settings/form/admin.custom_column.form.json +71 -71
  33. package/module/settings/form/admin.properties.form.json +15 -15
  34. package/module/settings/form/admin.roles.form.json +19 -19
  35. package/module/settings/form/admin.routes.form.json +25 -25
  36. package/module/settings/form/admin.user_properties.form.json +15 -15
  37. package/module/settings/form/admin.user_roles.form.json +21 -21
  38. package/module/settings/form/admin.users.form.json +153 -153
  39. package/module/settings/form/user.user_roles.form.json +13 -13
  40. package/module/settings/interface/admin.properties.json +4 -4
  41. package/module/settings/interface/admin.roles.json +4 -4
  42. package/module/settings/interface/admin.routes.json +4 -4
  43. package/module/settings/interface/admin.users.json +4 -4
  44. package/module/settings/menu.json +50 -50
  45. package/module/settings/select/core.roles.json +2 -2
  46. package/module/settings/select/core.routes.sql +1 -1
  47. package/module/settings/select/core.user_mentioned.sql +1 -1
  48. package/module/settings/select/core.user_uid.sql +1 -1
  49. package/module/settings/table/admin.access.table.json +83 -83
  50. package/module/settings/table/admin.custom_column.table.json +99 -99
  51. package/module/settings/table/admin.properties.table.json +39 -39
  52. package/module/settings/table/admin.roles.table.json +64 -64
  53. package/module/settings/table/admin.routes.table.json +68 -68
  54. package/module/settings/table/admin.user_properties.table.json +34 -34
  55. package/module/settings/table/admin.user_roles.table.json +72 -72
  56. package/module/settings/table/admin.users.table.json +121 -121
  57. package/package.json +81 -81
  58. package/plugin.js +29 -27
  59. package/server/helpers/controllers/badge.js +11 -11
  60. package/server/helpers/controllers/hb.js +2 -2
  61. package/server/helpers/controllers/map.js +2 -2
  62. package/server/helpers/controllers/mls.js +2 -2
  63. package/server/helpers/controllers/token.js +15 -15
  64. package/server/helpers/controllers/vue.js +2 -2
  65. package/server/helpers/index.mjs +17 -17
  66. package/server/plugins/access/funcs/getAdminAccess.js +15 -0
  67. package/server/plugins/access/index.mjs +6 -0
  68. package/server/plugins/adminHook.js +93 -93
  69. package/server/plugins/cron.js +10 -10
  70. package/server/plugins/docs.js +28 -28
  71. package/server/plugins/hook.js +223 -223
  72. package/server/plugins/vite.js +71 -71
  73. package/server/routes/access/controllers/access.group.js +30 -0
  74. package/server/routes/access/controllers/access.group.post.js +44 -0
  75. package/server/routes/access/index.mjs +63 -0
  76. package/server/routes/calendar/controllers/calendar.data.js +87 -87
  77. package/server/routes/calendar/index.mjs +7 -7
  78. package/server/routes/calendar/schema.js +21 -21
  79. package/server/routes/data/controllers/cardData.js +81 -79
  80. package/server/routes/data/controllers/cardTabData.js +49 -49
  81. package/server/routes/data/controllers/funcs/getFilterSQL/index.js +92 -92
  82. package/server/routes/data/controllers/funcs/getFilterSQL/util/formatValue.js +170 -170
  83. package/server/routes/data/controllers/funcs/getFilterSQL/util/getCustomQuery.js +13 -13
  84. package/server/routes/data/controllers/funcs/getFilterSQL/util/getFilterQuery.js +64 -64
  85. package/server/routes/data/controllers/funcs/getFilterSQL/util/getOptimizedQuery.js +12 -12
  86. package/server/routes/data/controllers/funcs/getFilterSQL/util/getTableSql.js +34 -34
  87. package/server/routes/data/controllers/tableData.js +20 -20
  88. package/server/routes/data/controllers/tableDataId.js +27 -27
  89. package/server/routes/data/controllers/tableFilter.js +63 -63
  90. package/server/routes/data/controllers/tokenInfo.js +10 -0
  91. package/server/routes/data/controllers/utils/assignTokens.js +30 -30
  92. package/server/routes/data/controllers/utils/getColumns.js +8 -8
  93. package/server/routes/data/index.mjs +17 -15
  94. package/server/routes/data/schema.js +54 -54
  95. package/server/routes/menu/controllers/getMenu.js +67 -67
  96. package/server/routes/menu/index.mjs +5 -5
  97. package/server/routes/notifications/controllers/readNotifications.js +27 -27
  98. package/server/routes/notifications/controllers/testEmail.js +35 -35
  99. package/server/routes/notifications/controllers/userNotifications.js +53 -53
  100. package/server/routes/notifications/funcs/addNotification.js +21 -21
  101. package/server/routes/notifications/funcs/sendNotification.js +105 -105
  102. package/server/routes/notifications/hook/onWidgetSet.js +57 -57
  103. package/server/routes/notifications/index.mjs +27 -27
  104. package/server/routes/notifications/schema.js +16 -16
  105. package/server/routes/properties/controllers/admin.properties.get.js +29 -29
  106. package/server/routes/properties/controllers/user.properties.get.js +30 -30
  107. package/server/routes/properties/controllers/user.properties.post.js +30 -30
  108. package/server/routes/properties/funcs/getSettings.js +56 -56
  109. package/server/routes/properties/funcs/setSettings.js +44 -44
  110. package/server/routes/properties/funcs/utils/dataInsert.js +26 -26
  111. package/server/routes/properties/index.mjs +14 -14
  112. package/server/routes/properties/schema.js +10 -10
  113. package/server/routes/root.mjs +3 -3
  114. package/server/routes/templates/controllers/getTemplate.js +26 -26
  115. package/server/routes/templates/index.mjs +16 -16
  116. package/server/routes/templates/schema.js +8 -8
  117. package/server/routes/user/controllers/user.cls.id.js +14 -14
  118. package/server/routes/user/controllers/user.cls.js +71 -71
  119. package/server/routes/user/controllers/user.cls.post.js +52 -52
  120. package/server/routes/user/controllers/user.info.js +17 -17
  121. package/server/routes/user/schema.js +14 -14
  122. package/server/routes/widget/controllers/utils/historyFormat.js +75 -75
  123. package/server/routes/widget/controllers/utils/obj2db.js +13 -13
  124. package/server/routes/widget/controllers/widget.del.js +41 -41
  125. package/server/routes/widget/controllers/widget.get.js +96 -96
  126. package/server/routes/widget/controllers/widget.set.js +76 -76
  127. package/server/routes/widget/index.mjs +11 -11
  128. package/server/routes/widget/schema.js +12 -12
  129. package/server/templates/cls/itree.recrzone_category.json +73 -73
  130. package/server/templates/cls/test.json +9 -9
  131. package/server/templates/form/admin.user_cls.data.form.json +49 -49
  132. package/server/templates/form/admin.user_group_rel.form.json +21 -21
  133. package/server/templates/form/cp_building.form.json +32 -32
  134. package/server/templates/form/form-user-pass.json +10 -10
  135. package/server/templates/form/form-user_group.json +39 -39
  136. package/server/templates/form/form-users.json +156 -156
  137. package/server/templates/form/user_group_access.form.json +22 -22
  138. package/server/templates/select/account_id.json +2 -2
  139. package/server/templates/table/gis.dataset.table.json +43 -43
  140. package/server/templates/table/management.user_group.table.json +112 -112
  141. package/server/templates/table/management.users.table.json +126 -126
  142. package/utils.js +29 -26
@@ -0,0 +1,44 @@
1
+ import { config, pgClients } from '@opengis/fastify-table/utils.js';
2
+
3
+ import { getAdminAccess } from '../../../../utils.js';
4
+ import accessGroup from './access.group.js';
5
+
6
+ export default async function accessGroupPost({
7
+ pg = pgClients.client, params = {}, session = {}, body = {},
8
+ }) {
9
+ const { id } = params;
10
+ const { user = {} } = session?.passport || {};
11
+ const uid = config?.auth?.disable ? '1' : user?.uid;
12
+
13
+ // restrict access - admin only
14
+ const check = await getAdminAccess({ id, user });
15
+ if (check) return check;
16
+
17
+ const { users = [], routes = [] } = body;
18
+
19
+ if (!routes?.length && !users?.length) {
20
+ return { message: 'not enough params: users / routes', status: 400 };
21
+ }
22
+
23
+ if (routes?.length) {
24
+ const q = `delete from admin.access where role_id='${id.replace(/'/g, "''")}';
25
+ insert into admin.access(role_id,route_id,actions)
26
+ values ${routes.filter((el) => el?.path && Object.hasOwn(el, 'actions')).map((el) => `('${id.replace(/'/g, "''")}','${el.path.replace(/'/g, "''")}',${el.actions?.length ? `'{ ${el.actions} }'::text[]` : 'null'})`)}`;
27
+
28
+ await pg.query(q);
29
+
30
+ if (!users?.length) {
31
+ return { message: { id, routes: rows }, status: 200 };
32
+ }
33
+ }
34
+
35
+ const q = `delete from admin.user_roles where role_id='${id.replace(/'/g, "''")}';
36
+ insert into admin.user_roles(role_id,user_uid,access_granted)
37
+ values ${users.filter((el) => el?.id).map((el) => `('${id.replace(/'/g, "''")}','${el.id.replace(/'/g, "''")}','${uid?.replace(/'/g, "''")}')`)}`;
38
+
39
+ await pg.query(q);
40
+
41
+ const res = await accessGroup({ pg, params, session });
42
+
43
+ return res;
44
+ }
@@ -0,0 +1,63 @@
1
+ import accessGroup from "./controllers/access.group.js";
2
+ import accessGroupPost from "./controllers/access.group.post.js";
3
+
4
+ const accessGroupSchema = {
5
+ params: {
6
+ type: 'object',
7
+ properties: {
8
+ id: { type: 'string', pattern: '^([\\d\\w._-]+)$' },
9
+ },
10
+ required: ['id'],
11
+ },
12
+ };
13
+
14
+ const accessGroupPostSchema = {
15
+ params: {
16
+ type: 'object',
17
+ properties: {
18
+ id: { type: 'string', pattern: '^([\\d\\w._-]+)$' },
19
+ },
20
+ required: ['id'],
21
+ },
22
+ body: {
23
+ type: 'object',
24
+ properties: {
25
+ users: {
26
+ type: 'array',
27
+ items: {
28
+ type: 'object',
29
+ properties: {
30
+ id: {
31
+ type: 'string',
32
+ pattern: '^([\\d\\w._-]+)$',
33
+ },
34
+ },
35
+ },
36
+ },
37
+ routes: {
38
+ type: 'array',
39
+ items: {
40
+ type: 'object',
41
+ properties: {
42
+ path: {
43
+ type: 'string',
44
+ pattern: '^([\\d\\w._-]+)$',
45
+ },
46
+ actions: {
47
+ type: 'array',
48
+ items: {
49
+ type: 'string',
50
+ enum: ['get', 'add', 'edit', 'del'],
51
+ },
52
+ },
53
+ },
54
+ },
55
+ },
56
+ },
57
+ },
58
+ };
59
+
60
+ export default async function route(fastify) {
61
+ fastify.get('/access-group/:id', { schema: accessGroupSchema }, accessGroup);
62
+ fastify.post('/access-group/:id', { schema: accessGroupPostSchema }, accessGroupPost);
63
+ }
@@ -1,88 +1,88 @@
1
- import { handlebars, getMeta, getTemplate } from '@opengis/fastify-table/utils.js';
2
-
3
- export default async function calendarData({
4
- pg, params = {}, query = {}, session = {},
5
- }) {
6
- const { name } = params;
7
- const { uid } = session.passport?.user || {};
8
- if (!name) {
9
- return { message: 'not enough params: name', status: 400 };
10
- }
11
- const { date, sql } = query;
12
-
13
-
14
- const body = await getTemplate('calendar', name);
15
-
16
- if (!body) {
17
- return { message: `calendar not found: ${name}`, status: 404 };
18
- }
19
-
20
- const {
21
- title,
22
- table,
23
- query: query1 = '1=1',
24
- meta = {},
25
- filter = [],
26
- } = body;
27
-
28
- if (!table) {
29
- return { message: 'not enough calendar params: table', status: 404 };
30
- }
31
- if (!pg.pk?.[table]) {
32
- return { message: `table pkey not found: ${table}`, status: 404 };
33
- }
34
-
35
- const filterWhere = filter?.length && query.filter?.length
36
- ? filter.filter((el) => (Object.hasOwn(el, 'enabled') ? el?.enabled : true))
37
- .map((el) => {
38
- const val = query.filter.split(',').find((e) => e?.split('=')?.shift()?.includes(el.column || el.name))?.split('=')?.pop();
39
- if (val) return el.column && val ? `(${[`${el.column}::text='${val.replace(/'/g,"''")}'::text`, el.query].filter((el) => el).join(' and ')})` : el.query;
40
- }).filter((el) => el).join(' and ')
41
- : undefined;
42
- // console.log(filterWhere);
43
-
44
- const queryWhere = await handlebars.compile(query1)({ uid });
45
- const filterDate = date ? `date_trunc('month', "${meta?.date || meta?.start}"::date)='${date}'::date` : undefined;
46
- const where = [queryWhere, filterDate, filterWhere].filter((el) => el).join(' and ');
47
-
48
- const filtersByColumn = filter.filter((el) => (Object.hasOwn(el, 'enabled') ? el?.enabled : true) && el?.column);
49
-
50
- const filters = [];
51
- if (filtersByColumn?.length) {
52
- await Promise.all(filtersByColumn.map(async (el) => {
53
- const { rows: filterData = [] } = await pg.query(`select $1 as id, count(*) from $2
54
- where ${el.query || '1=1'} and ${filterWhere || '1=1'} group by $1`, [el.column, table] );
55
- if (!filterData?.length) return;
56
-
57
- // const clsData = await getSelectVal({ pg, name: el.cls, values: filterData.map((el) => el.id) });
58
- const clsData = el.cls ? await getTemplate(['cls', 'select'], el.cls) : undefined;
59
-
60
- if (!el.cls) {
61
- filterData.forEach((el1) => filters.push(el1));
62
- return;
63
- }
64
-
65
- filterData.forEach((el1) => {
66
- const cls = clsData.find((item) => item.id === el1.id.toString());
67
- Object.assign(el1, { title: cls?.text, color: cls?.color });
68
- filters.push(el1);
69
- });
70
- }));
71
- }
72
-
73
- const tableMeta = await getMeta({ pg, table });
74
- const columnList = tableMeta?.columns?.map((el) => el?.name);
75
- const columns = Object.keys(meta).filter((el) => ['date', 'start','end','title','status'].includes(el) && columnList.includes(meta[el])).map((el) => `"${meta[el]}" as ${el}`);
76
-
77
- if (!columns?.length) {
78
- return { message: `calendar param meta is invalid: invalid/empty keys`, status: 404 };
79
- }
80
-
81
- const q = `select &1 from $2 where $3`;
82
- if (sql) return q;
83
-
84
- const { rows = [] } = await pg.query(q, [columns.join(','), table, where]);
85
-
86
- return { title, filters, rows };
87
-
1
+ import { handlebars, getMeta, getTemplate } from '@opengis/fastify-table/utils.js';
2
+
3
+ export default async function calendarData({
4
+ pg, params = {}, query = {}, session = {},
5
+ }) {
6
+ const { name } = params;
7
+ const { uid } = session.passport?.user || {};
8
+ if (!name) {
9
+ return { message: 'not enough params: name', status: 400 };
10
+ }
11
+ const { date, sql } = query;
12
+
13
+
14
+ const body = await getTemplate('calendar', name);
15
+
16
+ if (!body) {
17
+ return { message: `calendar not found: ${name}`, status: 404 };
18
+ }
19
+
20
+ const {
21
+ title,
22
+ table,
23
+ query: query1 = '1=1',
24
+ meta = {},
25
+ filter = [],
26
+ } = body;
27
+
28
+ if (!table) {
29
+ return { message: 'not enough calendar params: table', status: 404 };
30
+ }
31
+ if (!pg.pk?.[table]) {
32
+ return { message: `table pkey not found: ${table}`, status: 404 };
33
+ }
34
+
35
+ const filterWhere = filter?.length && query.filter?.length
36
+ ? filter.filter((el) => (Object.hasOwn(el, 'enabled') ? el?.enabled : true))
37
+ .map((el) => {
38
+ const val = query.filter.split(',').find((e) => e?.split('=')?.shift()?.includes(el.column || el.name))?.split('=')?.pop();
39
+ if (val) return el.column && val ? `(${[`${el.column}::text='${val.replace(/'/g,"''")}'::text`, el.query].filter((el) => el).join(' and ')})` : el.query;
40
+ }).filter((el) => el).join(' and ')
41
+ : undefined;
42
+ // console.log(filterWhere);
43
+
44
+ const queryWhere = await handlebars.compile(query1)({ uid });
45
+ const filterDate = date ? `date_trunc('month', "${meta?.date || meta?.start}"::date)='${date}'::date` : undefined;
46
+ const where = [queryWhere, filterDate, filterWhere].filter((el) => el).join(' and ');
47
+
48
+ const filtersByColumn = filter.filter((el) => (Object.hasOwn(el, 'enabled') ? el?.enabled : true) && el?.column);
49
+
50
+ const filters = [];
51
+ if (filtersByColumn?.length) {
52
+ await Promise.all(filtersByColumn.map(async (el) => {
53
+ const { rows: filterData = [] } = await pg.query(`select $1 as id, count(*) from $2
54
+ where ${el.query || '1=1'} and ${filterWhere || '1=1'} group by $1`, [el.column, table] );
55
+ if (!filterData?.length) return;
56
+
57
+ // const clsData = await getSelectVal({ pg, name: el.cls, values: filterData.map((el) => el.id) });
58
+ const clsData = el.cls ? await getTemplate(['cls', 'select'], el.cls) : undefined;
59
+
60
+ if (!el.cls) {
61
+ filterData.forEach((el1) => filters.push(el1));
62
+ return;
63
+ }
64
+
65
+ filterData.forEach((el1) => {
66
+ const cls = clsData.find((item) => item.id === el1.id.toString());
67
+ Object.assign(el1, { title: cls?.text, color: cls?.color });
68
+ filters.push(el1);
69
+ });
70
+ }));
71
+ }
72
+
73
+ const tableMeta = await getMeta({ pg, table });
74
+ const columnList = tableMeta?.columns?.map((el) => el?.name);
75
+ const columns = Object.keys(meta).filter((el) => ['date', 'start','end','title','status'].includes(el) && columnList.includes(meta[el])).map((el) => `"${meta[el]}" as ${el}`);
76
+
77
+ if (!columns?.length) {
78
+ return { message: `calendar param meta is invalid: invalid/empty keys`, status: 404 };
79
+ }
80
+
81
+ const q = `select &1 from $2 where $3`;
82
+ if (sql) return q;
83
+
84
+ const { rows = [] } = await pg.query(q, [columns.join(','), table, where]);
85
+
86
+ return { title, filters, rows };
87
+
88
88
  }
@@ -1,7 +1,7 @@
1
- import calendarData from "./controllers/calendar.data.js";
2
-
3
- import { calendarDataSchema } from './schema.js';
4
-
5
- export default async function route(fastify) {
6
- fastify.get('/calendar/:name', { schema: calendarDataSchema }, calendarData);
7
- }
1
+ import calendarData from "./controllers/calendar.data.js";
2
+
3
+ import { calendarDataSchema } from './schema.js';
4
+
5
+ export default async function route(fastify) {
6
+ fastify.get('/calendar/:name', { schema: calendarDataSchema }, calendarData);
7
+ }
@@ -1,22 +1,22 @@
1
- const calendarDataSchema = {
2
- params: {
3
- name: { type: 'string', pattern: '^([\\d\\w._-]+)$' },
4
- },
5
- querystring: {
6
- date: { type: 'string', pattern: '^([\\d\\s\\/,.:-]+)$' },
7
- sql: { type: 'string', pattern: '^(\\d)$' },
8
- },
9
-
10
- // query: {
11
- // type: 'object',
12
- // properties: {
13
- // date: {
14
- // type: 'string',
15
- // format: 'date',
16
- // },
17
- // },
18
- // },
19
- };
20
-
21
- export { calendarDataSchema }
1
+ const calendarDataSchema = {
2
+ params: {
3
+ name: { type: 'string', pattern: '^([\\d\\w._-]+)$' },
4
+ },
5
+ querystring: {
6
+ date: { type: 'string', pattern: '^([\\d\\s\\/,.:-]+)$' },
7
+ sql: { type: 'string', pattern: '^(\\d)$' },
8
+ },
9
+
10
+ // query: {
11
+ // type: 'object',
12
+ // properties: {
13
+ // date: {
14
+ // type: 'string',
15
+ // format: 'date',
16
+ // },
17
+ // },
18
+ // },
19
+ };
20
+
21
+ export { calendarDataSchema }
22
22
  export default null;
@@ -1,80 +1,82 @@
1
- import path from 'node:path';
2
-
3
- import { config, handlebars, setOpt, setToken, getTemplate, handlebarsSync } from "@opengis/fastify-table/utils.js";
4
- //import { setOpt, setToken } from "../../../../../fastify-table/utils.js";
5
- // import yaml from 'js-yaml';
6
- import getTableData from "./tableData.js";
7
-
8
- export default async function getCardData(req) {
9
- const {
10
- pg, params = {}, session = {}, user
11
- } = req;
12
- const { table, id } = params;
13
- const uid = config?.auth?.disable ? '1' : session.passport?.user?.uid;
14
-
15
- const time = Date.now();
16
-
17
- const template = await getTemplate('card', table);
18
-
19
- const tableTemplate = await getTemplate('table', table);
20
- const index = template?.find(el => el[0] === 'index.yml')?.[1] || {};
21
-
22
- // tokens result
23
- const tokens = {};
24
- if (index?.tokens && typeof index?.tokens === 'object' && !Array.isArray(index?.tokens)) {
25
- for (let key in index?.tokens) {
26
- const item = index?.tokens[key];
27
- Object.keys(item).filter(el => item[el].includes('{{')).forEach(el => {
28
- item[el] = handlebarsSync.compile(item[el])({ user, uid: user?.uid, id });
29
- });
30
-
31
- const token = item.form && item.table ? setToken({
32
- ids: [JSON.stringify(item)],
33
- uid,
34
- array: 1,
35
- })[0] : setOpt(item, user.uid);
36
- tokens[key] = token;
37
- }
38
- }
39
-
40
- // vue result
41
- const vue = template
42
- .filter((el) => el[0].endsWith('.vue'))
43
- .reduce((acc, curr) => Object.assign(acc, { [path.parse(curr[0]).name]: curr[1].match(/<template[^>]*>([\s\S]*?)<\/template>/)[1].trim() }), {});
44
-
45
- // data result
46
- const data = {};
47
- if (index?.data && index?.data?.[0]?.name) {
48
- await Promise.all(index.data.filter((el) => el?.name && el?.sql).map(async (el) => {
49
- const q = handlebarsSync.compile(el.sql)({ user, uid: user?.uid, id });
50
- const { rows = [] } = await pg.query(q);
51
- data[el.name] = rows;
52
- }));
53
- }
54
-
55
- const { message, rows = [] } = await getTableData({ pg, params: { table, id }, session, user });
56
-
57
- if (message) return { message };
58
-
59
- // html result
60
- const html = {};
61
- if (template) {
62
- await Promise.all(template.filter(el => el[0].includes('.hbs')).map(async (el) => {
63
- const htmlContent = await handlebars.compile(el[1])({ ...rows[0], user, data, tokens });
64
- const name = el[0].substring(0, el[0].lastIndexOf('.'))
65
- html[name] = htmlContent;
66
- }));
67
- }
68
-
69
- return {
70
- time: Date.now() - time,
71
- ...index,
72
- tokens,
73
- vue,
74
- data,
75
- html,
76
- rows,
77
- columns: tableTemplate?.columns || tableTemplate?.colModel,
78
- };
79
-
1
+ import path from 'node:path';
2
+
3
+ import { config, handlebars, setOpt, setToken, getTemplate, handlebarsSync } from "@opengis/fastify-table/utils.js";
4
+ //import { setOpt, setToken } from "../../../../../fastify-table/utils.js";
5
+ // import yaml from 'js-yaml';
6
+ import getTableData from "./tableData.js";
7
+
8
+ export default async function getCardData(req) {
9
+ const {
10
+ pg, params = {}, session = {}, user
11
+ } = req;
12
+ const { table, id } = params;
13
+ const uid = config?.auth?.disable ? '1' : session.passport?.user?.uid;
14
+
15
+ const time = Date.now();
16
+
17
+ const template = await getTemplate('card', table);
18
+
19
+ const tableTemplate = await getTemplate('table', table);
20
+ const index = template?.find(el => el[0] === 'index.yml')?.[1] || {};
21
+
22
+ const { message, rows = [] } = await getTableData({ pg, params: { table, id }, session, user });
23
+
24
+ if (message) return { message };
25
+
26
+ // tokens result
27
+ const tokens = {};
28
+ if (index?.tokens && typeof index?.tokens === 'object' && !Array.isArray(index?.tokens)) {
29
+ for (let key in index?.tokens) {
30
+ const item = index?.tokens[key];
31
+ Object.keys(item).filter(el => item[el]?.includes?.('{{')).forEach(el => {
32
+ item[el] = handlebarsSync.compile(item[el])({ user, uid: user?.uid, id, data: rows[0] });
33
+ });
34
+
35
+ const token = item.form && item.table ? setToken({
36
+ ids: [JSON.stringify(item)],
37
+ uid,
38
+ array: 1,
39
+ })[0] : setOpt(item, user.uid);
40
+ tokens[key] = token;
41
+ }
42
+ }
43
+
44
+ // vue result
45
+ const vue = template
46
+ .filter((el) => el[0].endsWith('.vue'))
47
+ .reduce((acc, curr) => Object.assign(acc, { [path.parse(curr[0]).name]: curr[1].match(/<template[^>]*>([\s\S]*?)<\/template>/)[1].trim() }), {});
48
+
49
+ // data result
50
+ const data = {};
51
+ if (index?.data && index?.data?.[0]?.name) {
52
+ await Promise.all(index.data.filter((el) => el?.name && el?.sql).map(async (el) => {
53
+ const q = handlebarsSync.compile(el.sql)({ user, uid: user?.uid, id });
54
+ const { rows = [] } = await pg.query(q);
55
+ data[el.name] = rows;
56
+ }));
57
+ }
58
+
59
+
60
+
61
+ // html result
62
+ const html = {};
63
+ if (template) {
64
+ await Promise.all(template.filter(el => el[0].includes('.hbs')).map(async (el) => {
65
+ const htmlContent = await handlebars.compile(el[1])({ ...rows[0], user, data, tokens });
66
+ const name = el[0].substring(0, el[0].lastIndexOf('.'))
67
+ html[name] = htmlContent;
68
+ }));
69
+ }
70
+
71
+ return {
72
+ time: Date.now() - time,
73
+ ...index,
74
+ tokens,
75
+ vue,
76
+ data,
77
+ html,
78
+ rows,
79
+ columns: tableTemplate?.columns || tableTemplate?.colModel,
80
+ };
81
+
80
82
  }
@@ -1,50 +1,50 @@
1
- import { config, handlebars, getToken, getTemplate, getMeta } from "@opengis/fastify-table/utils.js";
2
-
3
- import getTableData from "./tableData.js";
4
-
5
- export default async function cardTabData({
6
- pg, query = {}, params = {}, session = {},
7
- }) {
8
- const { token } = params;
9
- const { sql } = query;
10
-
11
- if (!token) {
12
- return { message: 'not enough params: token', status: 400 };
13
- }
14
-
15
- const time = Date.now();
16
- const { uid } = config?.auth?.disable ? { uid: '1' } : (session.passport?.user || {});
17
-
18
- const props = await getToken({
19
- token,
20
- mode: 'w',
21
- uid,
22
- json: 1,
23
- });
24
-
25
- if (!props || !props?.table || !props) {
26
- return { message: { error: 'token is invalid', props }, status: 403 };
27
- }
28
-
29
- const tableTemplate = await getTemplate('table', props.table);
30
-
31
- const { columns = [] } = tableTemplate?.columns || tableTemplate?.colModel
32
- ? { columns: tableTemplate?.columns || tableTemplate?.colModel }
33
- : await getMeta({ table: props.table });
34
-
35
- const filter = await handlebars.compile(props.query.replace(/@id/g, '{{id}}'))(props);
36
- const { message, rows = [] } = await getTableData({ pg, params: { table: props.table }, session, query: { filter, sql } });
37
- if (message) return { message };
38
-
39
- if (props.columns?.length && rows?.length) {
40
- const allowList = ['id', 'token'].concat(props.columns).map((el) => [el, `${el}_text`]).flat();
41
- rows.forEach((row) => Object.keys(row).forEach((el) => { if (!allowList.includes(el)) delete row[el]; }));
42
-
43
- return {
44
- time: Date.now() - time,
45
- rows,
46
- columns: columns.filter((col) => props.columns.includes(col.name)),
47
- };
48
- }
49
- return { time: Date.now() - time, rows, columns };
1
+ import { config, handlebars, getToken, getTemplate, getMeta } from "@opengis/fastify-table/utils.js";
2
+
3
+ import getTableData from "./tableData.js";
4
+
5
+ export default async function cardTabData({
6
+ pg, query = {}, params = {}, session = {},
7
+ }) {
8
+ const { token } = params;
9
+ const { sql } = query;
10
+
11
+ if (!token) {
12
+ return { message: 'not enough params: token', status: 400 };
13
+ }
14
+
15
+ const time = Date.now();
16
+ const { uid } = config?.auth?.disable ? { uid: '1' } : (session.passport?.user || {});
17
+
18
+ const props = await getToken({
19
+ token,
20
+ mode: 'w',
21
+ uid,
22
+ json: 1,
23
+ });
24
+
25
+ if (!props || !props?.table || !props) {
26
+ return { message: { error: 'token is invalid', props }, status: 403 };
27
+ }
28
+
29
+ const tableTemplate = await getTemplate('table', props.table);
30
+
31
+ const { columns = [] } = tableTemplate?.columns || tableTemplate?.colModel
32
+ ? { columns: tableTemplate?.columns || tableTemplate?.colModel }
33
+ : await getMeta({ table: props.table });
34
+
35
+ const filter = await handlebars.compile(props.query.replace(/@id/g, '{{id}}'))(props);
36
+ const { message, rows = [] } = await getTableData({ pg, params: { table: props.table }, session, query: { filter, sql } });
37
+ if (message) return { message };
38
+
39
+ if (props.columns?.length && rows?.length) {
40
+ const allowList = ['id', 'token'].concat(props.columns).map((el) => [el, `${el}_text`]).flat();
41
+ rows.forEach((row) => Object.keys(row).forEach((el) => { if (!allowList.includes(el)) delete row[el]; }));
42
+
43
+ return {
44
+ time: Date.now() - time,
45
+ rows,
46
+ columns: columns.filter((col) => props.columns.includes(col.name)),
47
+ };
48
+ }
49
+ return { time: Date.now() - time, rows, columns };
50
50
  }