@opengis/admin 0.1.58 → 0.1.59

Sign up to get free protection for your applications and to get access to all the features.
Files changed (111) hide show
  1. package/README.md +29 -29
  2. package/config.js +4 -4
  3. package/dist/{add-page-d6TCPawD.js → add-page-BOXd-uV_.js} +1 -1
  4. package/dist/{admin-interface-w6YuIWM3.js → admin-interface-DbfKIAnw.js} +211 -207
  5. package/dist/{admin-view-3Sz3UF_y.js → admin-view-DDDd_P1v.js} +2 -2
  6. package/dist/admin.js +1 -1
  7. package/dist/admin.umd.cjs +12 -12
  8. package/dist/{card-page-BsQts5XS.js → card-page-Bq7fUm5C.js} +2 -2
  9. package/dist/{card-view-UYkkl_Pu.js → card-view-NLu0N8TA.js} +1 -1
  10. package/dist/{edit-page-CtKHElG1.js → edit-page-z7ozrw2C.js} +1 -1
  11. package/dist/{import-file-CsCQ5xvs.js → import-file-BBA7riUK.js} +13 -20
  12. package/dist/style.css +1 -1
  13. package/module/settings/card/admin.roles.table/access.hbs +27 -27
  14. package/module/settings/card/admin.roles.table/general_info.hbs +16 -16
  15. package/module/settings/card/admin.roles.table/index.yml +14 -14
  16. package/module/settings/card/admin.roles.table/users.hbs +27 -27
  17. package/module/settings/card/admin.routes.table/general_info.hbs +40 -40
  18. package/module/settings/card/admin.routes.table/index.yml +8 -8
  19. package/module/settings/card/admin.routes.table/users.hbs +33 -33
  20. package/module/settings/card/admin.users.table/general_info.hbs +25 -25
  21. package/module/settings/card/admin.users.table/index.yml +12 -12
  22. package/module/settings/card/admin.users.table/logs.hbs +30 -30
  23. package/module/settings/card/admin.users.table/user_roles.hbs +24 -24
  24. package/module/settings/cls/core.actions.json +13 -13
  25. package/module/settings/cls/core.scope.json +13 -13
  26. package/module/settings/cls/properties.site_status.json +13 -13
  27. package/module/settings/cls/properties.widget_status.json +13 -13
  28. package/module/settings/cls/users.user_type.json +13 -13
  29. package/module/settings/form/admin.access.form.json +36 -36
  30. package/module/settings/form/admin.custom_column.form.json +71 -71
  31. package/module/settings/form/admin.properties.form.json +15 -15
  32. package/module/settings/form/admin.roles.form.json +19 -19
  33. package/module/settings/form/admin.routes.form.json +25 -25
  34. package/module/settings/form/admin.user_properties.form.json +15 -15
  35. package/module/settings/form/admin.user_roles.form.json +21 -21
  36. package/module/settings/form/admin.users.form.json +150 -150
  37. package/module/settings/form/user.user_roles.form.json +13 -13
  38. package/module/settings/interface/admin.properties.json +4 -4
  39. package/module/settings/interface/admin.roles.json +4 -4
  40. package/module/settings/interface/admin.routes.json +4 -4
  41. package/module/settings/interface/admin.users.json +4 -4
  42. package/module/settings/menu.json +50 -50
  43. package/module/settings/select/core.roles.json +2 -2
  44. package/module/settings/select/core.routes.sql +1 -1
  45. package/module/settings/select/core.user_uid.sql +1 -1
  46. package/module/settings/table/admin.access.table.json +77 -77
  47. package/module/settings/table/admin.custom_column.table.json +94 -94
  48. package/module/settings/table/admin.properties.table.json +33 -33
  49. package/module/settings/table/admin.roles.table.json +58 -58
  50. package/module/settings/table/admin.routes.table.json +67 -67
  51. package/module/settings/table/admin.user_properties.table.json +28 -28
  52. package/module/settings/table/admin.user_roles.table.json +66 -66
  53. package/module/settings/table/admin.users.table.json +119 -119
  54. package/package.json +79 -81
  55. package/plugin.js +164 -162
  56. package/server/helpers/controllers/badge.js +11 -11
  57. package/server/helpers/controllers/hb.js +2 -2
  58. package/server/helpers/controllers/map.js +2 -2
  59. package/server/helpers/controllers/mls.js +2 -2
  60. package/server/helpers/controllers/vue.js +2 -2
  61. package/server/helpers/index.mjs +13 -13
  62. package/server/plugins/docs.js +28 -28
  63. package/server/plugins/hook.js +228 -228
  64. package/server/plugins/vite.js +69 -69
  65. package/server/routes/calendar/controllers/calendar.data.js +88 -88
  66. package/server/routes/calendar/index.mjs +17 -17
  67. package/server/routes/data/controllers/cardData.js +56 -56
  68. package/server/routes/data/controllers/cardTabData.js +49 -49
  69. package/server/routes/data/controllers/funcs/getFilterSQL/index.js +92 -92
  70. package/server/routes/data/controllers/funcs/getFilterSQL/util/formatValue.js +170 -170
  71. package/server/routes/data/controllers/funcs/getFilterSQL/util/getCustomQuery.js +13 -13
  72. package/server/routes/data/controllers/funcs/getFilterSQL/util/getFilterQuery.js +64 -64
  73. package/server/routes/data/controllers/funcs/getFilterSQL/util/getOptimizedQuery.js +12 -12
  74. package/server/routes/data/controllers/funcs/getFilterSQL/util/getTableSql.js +34 -34
  75. package/server/routes/data/controllers/tableData.js +145 -145
  76. package/server/routes/data/controllers/tableDataId.js +27 -27
  77. package/server/routes/data/controllers/tableFilter.js +63 -63
  78. package/server/routes/data/controllers/utils/assignTokens.js +30 -30
  79. package/server/routes/data/controllers/utils/getColumns.js +21 -21
  80. package/server/routes/data/index.mjs +15 -15
  81. package/server/routes/data/schema.js +7 -7
  82. package/server/routes/menu/controllers/getMenu.js +34 -34
  83. package/server/routes/menu/index.mjs +5 -5
  84. package/server/routes/notifications/controllers/readNotifications.js +30 -30
  85. package/server/routes/notifications/controllers/userNotifications.js +64 -64
  86. package/server/routes/notifications/hook/onWidgetSet.js +63 -63
  87. package/server/routes/notifications/index.mjs +40 -40
  88. package/server/routes/properties/controllers/admin.properties.get.js +29 -29
  89. package/server/routes/properties/controllers/user.properties.get.js +34 -34
  90. package/server/routes/properties/controllers/user.properties.post.js +30 -30
  91. package/server/routes/properties/funcs/getSettings.js +56 -56
  92. package/server/routes/properties/funcs/setSettings.js +44 -44
  93. package/server/routes/properties/funcs/utils/dataInsert.js +26 -26
  94. package/server/routes/properties/index.mjs +26 -26
  95. package/server/routes/root.mjs +3 -3
  96. package/server/routes/templates/controllers/getTemplate.js +16 -16
  97. package/server/routes/templates/index.mjs +14 -14
  98. package/server/templates/cls/itree.recrzone_category.json +73 -73
  99. package/server/templates/cls/test.json +9 -9
  100. package/server/templates/form/admin.user_cls.data.form.json +49 -49
  101. package/server/templates/form/admin.user_group_rel.form.json +21 -21
  102. package/server/templates/form/cp_building.form.json +32 -32
  103. package/server/templates/form/form-user-pass.json +10 -10
  104. package/server/templates/form/form-user_group.json +39 -39
  105. package/server/templates/form/form-users.json +156 -156
  106. package/server/templates/form/user_group_access.form.json +22 -22
  107. package/server/templates/select/account_id.json +2 -2
  108. package/server/templates/table/gis.dataset.table.json +43 -43
  109. package/server/templates/table/management.user_group.table.json +112 -112
  110. package/server/templates/table/management.users.table.json +126 -126
  111. package/utils.js +21 -21
@@ -1,35 +1,35 @@
1
-
2
- import { join } from 'path';
3
- import { userTemplateDir } from '@opengis/fastify-table/utils.js';
4
-
5
- import { existsSync, readdirSync, readFileSync } from 'fs';
6
- const menuCache = [];
7
- // check module dir
8
- const moduleDir = join(process.cwd(), 'module');
9
- const dirs = existsSync(moduleDir) ?
10
- readdirSync(moduleDir).map(el => join(moduleDir, el)) : [];
11
-
12
- // all menu files module + user
13
-
14
-
15
-
16
- const isProduction = process.env.NODE_ENV === 'production';
17
- // readMenu();
18
-
19
- async function readMenu() {
20
- const menuList = dirs.concat(userTemplateDir)
21
- .map(el => join(el, 'menu.json'))
22
- .filter(el => existsSync(el))
23
- // const list = menuList.map(el => readFileSync(el, 'utf-8')); // sync
24
- const list = await Promise.all(menuList.map(el => readFileSync(el, 'utf-8'))); // sync
25
- const menus = list.reduce((p, el) => p.concat(JSON.parse(el)), [])
26
- .map(el => ({ order: 0, ...el }))
27
- .sort((a, b) => (a.order > b.order) ? 1 : ((b.order > a.order) ? -1 : 0))
28
-
29
- if (!menuCache.length) menus.forEach(el => menuCache.push(el))
30
- return menus;
31
- }
32
- export default async function adminMenu() {
33
- const menus = isProduction && menuCache.length ? menuCache : await readMenu();
34
- return menus;
1
+
2
+ import { join } from 'path';
3
+ import { userTemplateDir } from '@opengis/fastify-table/utils.js';
4
+
5
+ import { existsSync, readdirSync, readFileSync } from 'fs';
6
+ const menuCache = [];
7
+ // check module dir
8
+ const moduleDir = join(process.cwd(), 'module');
9
+ const dirs = existsSync(moduleDir) ?
10
+ readdirSync(moduleDir).map(el => join(moduleDir, el)) : [];
11
+
12
+ // all menu files module + user
13
+
14
+
15
+
16
+ const isProduction = process.env.NODE_ENV === 'production';
17
+ // readMenu();
18
+
19
+ async function readMenu() {
20
+ const menuList = dirs.concat(userTemplateDir)
21
+ .map(el => join(el, 'menu.json'))
22
+ .filter(el => existsSync(el))
23
+ // const list = menuList.map(el => readFileSync(el, 'utf-8')); // sync
24
+ const list = await Promise.all(menuList.map(el => readFileSync(el, 'utf-8'))); // sync
25
+ const menus = list.reduce((p, el) => p.concat(JSON.parse(el)), [])
26
+ .map(el => ({ order: 0, ...el }))
27
+ .sort((a, b) => (a.order > b.order) ? 1 : ((b.order > a.order) ? -1 : 0))
28
+
29
+ if (!menuCache.length) menus.forEach(el => menuCache.push(el))
30
+ return menus;
31
+ }
32
+ export default async function adminMenu() {
33
+ const menus = isProduction && menuCache.length ? menuCache : await readMenu();
34
+ return menus;
35
35
  }
@@ -1,5 +1,5 @@
1
- import getMenu from './controllers/getMenu.js';
2
-
3
- export default async function (fastify, opts) {
4
- fastify.get(`/user-menu`, getMenu);
5
- }
1
+ import getMenu from './controllers/getMenu.js';
2
+
3
+ export default async function (fastify, opts) {
4
+ fastify.get(`/user-menu`, getMenu);
5
+ }
@@ -1,30 +1,30 @@
1
- export default async function readNotifications({
2
- pg, params = {}, query = {}, session = {},
3
- }) {
4
- const { uid } = session.passport?.user || {};
5
-
6
- if (!uid) {
7
- return { message: 'access restricted', status: 403 };
8
- }
9
-
10
- try {
11
- const { userId } = await pg.query('select uid as "userId" from admin.users where $1 in (uid,login) limit 1', [uid])
12
- .then((res) => res.rows?.[0] || {});
13
-
14
- if (!userId) {
15
- return { message: 'access restricted: 2', status: 403 };
16
- }
17
-
18
- const q = `update crm.notifications set read=true where read is not true
19
- and ${params?.id ? 'notification_id=$2' : '1=1'} and addressee_id=$1`;
20
-
21
- if (query.sql) return q;
22
-
23
- const { rowCount = 0 } = await pg.query(q, [userId, params?.id].filter((el) => el));
24
-
25
- return { message: `${rowCount} unread notifications marked as read`, status: 200 };
26
- }
27
- catch (err) {
28
- return { error: err.toString(), status: 500 };
29
- }
30
- }
1
+ export default async function readNotifications({
2
+ pg, params = {}, query = {}, session = {},
3
+ }) {
4
+ const { uid } = session.passport?.user || {};
5
+
6
+ if (!uid) {
7
+ return { message: 'access restricted', status: 403 };
8
+ }
9
+
10
+ try {
11
+ const { userId } = await pg.query('select uid as "userId" from admin.users where $1 in (uid,login) limit 1', [uid])
12
+ .then((res) => res.rows?.[0] || {});
13
+
14
+ if (!userId) {
15
+ return { message: 'access restricted: 2', status: 403 };
16
+ }
17
+
18
+ const q = `update crm.notifications set read=true where read is not true
19
+ and ${params?.id ? 'notification_id=$2' : '1=1'} and addressee_id=$1`;
20
+
21
+ if (query.sql) return q;
22
+
23
+ const { rowCount = 0 } = await pg.query(q, [userId, params?.id].filter((el) => el));
24
+
25
+ return { message: `${rowCount} unread notifications marked as read`, status: 200 };
26
+ }
27
+ catch (err) {
28
+ return { error: err.toString(), status: 500 };
29
+ }
30
+ }
@@ -1,64 +1,64 @@
1
- // for example only
2
- /*
3
- const res = await funcs.dataInsert({
4
- pg,
5
- table: 'crm.notifications',
6
- data: {
7
- subject: 'notif title',
8
- body: 'notif body',
9
- link: 'http://localhost:3000/api/notification',
10
- addressee_id: userId,
11
- author_id: userId,
12
- },
13
- });
14
- */
15
-
16
- import { getSelectVal } from '@opengis/fastify-table/utils.js';
17
-
18
- const maxLimit = 100;
19
-
20
- export default async function userNotifications({
21
- pg, query = {}, session = {},
22
- }) {
23
- const time = Date.now();
24
-
25
- const { uid } = session.passport?.user || {};
26
-
27
- if (!uid) {
28
- return { message: 'access restricted', status: 403 };
29
- }
30
-
31
- const limit = Math.min(maxLimit, +(query.limit || 5));
32
- const offset = query.page && query.page > 0 ? (query.page - 1) * limit : 0;
33
-
34
- try {
35
- const { userId } = await pg.query('select uid as "userId" from admin.users where $1 in (uid,login) limit 1', [uid])
36
- .then((res) => res.rows?.[0] || {});
37
-
38
- if (!userId) {
39
- return { message: 'access restricted: 2', status: 403 };
40
- }
41
-
42
- const q = `select notification_id as id, subject, body, cdate,
43
- author_id, read, link, entity_id, (select avatar from admin.users where uid=a.author_id limit 1) as avatar from crm.notifications a where addressee_id=$1 order by cdate desc limit ${limit} offset ${offset}`;
44
-
45
- if (query.sql) return q;
46
-
47
- const { rows = [] } = await pg.query(q, [userId]);
48
-
49
- const values = rows.map((el) => el.author_id)
50
- ?.filter((el, idx, arr) => el && arr.indexOf(el) === idx);
51
-
52
- if (values?.length) {
53
- const vals = await getSelectVal({ name: 'core.user_mentioned', values });
54
- rows.forEach((row) => {
55
- Object.assign(row, { author: vals?.[row.author_id] });
56
- });
57
- }
58
-
59
- return { time: Date.now() - time, total: rows?.length, rows };
60
- }
61
- catch (err) {
62
- return { error: err.toString(), status: 500 };
63
- }
64
- }
1
+ // for example only
2
+ /*
3
+ const res = await funcs.dataInsert({
4
+ pg,
5
+ table: 'crm.notifications',
6
+ data: {
7
+ subject: 'notif title',
8
+ body: 'notif body',
9
+ link: 'http://localhost:3000/api/notification',
10
+ addressee_id: userId,
11
+ author_id: userId,
12
+ },
13
+ });
14
+ */
15
+
16
+ import { getSelectVal } from '@opengis/fastify-table/utils.js';
17
+
18
+ const maxLimit = 100;
19
+
20
+ export default async function userNotifications({
21
+ pg, query = {}, session = {},
22
+ }) {
23
+ const time = Date.now();
24
+
25
+ const { uid } = session.passport?.user || {};
26
+
27
+ if (!uid) {
28
+ return { message: 'access restricted', status: 403 };
29
+ }
30
+
31
+ const limit = Math.min(maxLimit, +(query.limit || 5));
32
+ const offset = query.page && query.page > 0 ? (query.page - 1) * limit : 0;
33
+
34
+ try {
35
+ const { userId } = await pg.query('select uid as "userId" from admin.users where $1 in (uid,login) limit 1', [uid])
36
+ .then((res) => res.rows?.[0] || {});
37
+
38
+ if (!userId) {
39
+ return { message: 'access restricted: 2', status: 403 };
40
+ }
41
+
42
+ const q = `select notification_id as id, subject, body, cdate,
43
+ author_id, read, link, entity_id, (select avatar from admin.users where uid=a.author_id limit 1) as avatar from crm.notifications a where addressee_id=$1 order by cdate desc limit ${limit} offset ${offset}`;
44
+
45
+ if (query.sql) return q;
46
+
47
+ const { rows = [] } = await pg.query(q, [userId]);
48
+
49
+ const values = rows.map((el) => el.author_id)
50
+ ?.filter((el, idx, arr) => el && arr.indexOf(el) === idx);
51
+
52
+ if (values?.length) {
53
+ const vals = await getSelectVal({ name: 'core.user_mentioned', values });
54
+ rows.forEach((row) => {
55
+ Object.assign(row, { author: vals?.[row.author_id] });
56
+ });
57
+ }
58
+
59
+ return { time: Date.now() - time, total: rows?.length, rows };
60
+ }
61
+ catch (err) {
62
+ return { error: err.toString(), status: 500 };
63
+ }
64
+ }
@@ -1,63 +1,63 @@
1
- /* eslint-disable camelcase */
2
- import {
3
- getSelect, addNotification, sendNotification,
4
- } from '@opengis/fastify-table/utils.js';
5
-
6
- function sequence(arr, data, fn) {
7
- return arr.reduce((promise, row) => promise.then(() => fn({
8
- ...data, ...row,
9
- })), Promise.resolve());
10
- }
11
-
12
- export default async function onWidgetSet({ req, type, data = {} }) {
13
- const values = data.body?.match(/\B@[a-zA-z0-9а-яА-яіїІЇєЄ]+ [a-zA-z0-9а-яА-яіїІЇєЄ]+/g)
14
- ?.filter((el, idx, arr) => el?.replace && arr.indexOf(el) === idx)
15
- ?.map((el) => el.replace(/@/g, ''));
16
-
17
- if (type !== 'comment' || !values?.length) {
18
- return null;
19
- }
20
-
21
- const {
22
- pg, funcs, path: link, session = {}, log,
23
- } = req;
24
- const { config = {} } = funcs;
25
-
26
- const { sql } = await getSelect('core.user_mentioned');
27
-
28
- const { rows = [] } = await pg.query(`with data (id,name,email) as (${sql})
29
- select id, name, email from data where name = any($1)`, [values]);
30
-
31
- if (!rows?.length) {
32
- return null;
33
- }
34
-
35
- const message = `${data.body?.substring(0, 50)}...`;
36
- const subject = 'You were mentioned';
37
-
38
- await sequence(rows, {}, async ({ id, name, email }) => {
39
- const res = await addNotification({
40
- pg, funcs, session, subject, entity: data.entity_id, body: message, link, uid: id,
41
- });
42
- try {
43
- const res1 = await sendNotification({
44
- pg,
45
- funcs,
46
- log,
47
- to: email,
48
- // template,
49
- message,
50
- title: subject,
51
- data,
52
- nocache: 1,
53
- });
54
- if (config.local) console.info('comment notification', name, id, email, res1);
55
- await pg.query('update crm.notifications set sent=true where notification_id=$1', [res?.notification_id]);
56
- }
57
- catch (err) {
58
- console.error('comment notification send error', err.toString());
59
- }
60
- });
61
- console.log('comment notification add', rows);
62
- return null;
63
- }
1
+ /* eslint-disable camelcase */
2
+ import {
3
+ getSelect, addNotification, sendNotification,
4
+ } from '@opengis/fastify-table/utils.js';
5
+
6
+ function sequence(arr, data, fn) {
7
+ return arr.reduce((promise, row) => promise.then(() => fn({
8
+ ...data, ...row,
9
+ })), Promise.resolve());
10
+ }
11
+
12
+ export default async function onWidgetSet({ req, type, data = {} }) {
13
+ const values = data.body?.match(/\B@[a-zA-z0-9а-яА-яіїІЇєЄ]+ [a-zA-z0-9а-яА-яіїІЇєЄ]+/g)
14
+ ?.filter((el, idx, arr) => el?.replace && arr.indexOf(el) === idx)
15
+ ?.map((el) => el.replace(/@/g, ''));
16
+
17
+ if (type !== 'comment' || !values?.length) {
18
+ return null;
19
+ }
20
+
21
+ const {
22
+ pg, funcs, path: link, session = {}, log,
23
+ } = req;
24
+ const { config = {} } = funcs;
25
+
26
+ const { sql } = await getSelect('core.user_mentioned');
27
+
28
+ const { rows = [] } = await pg.query(`with data (id,name,email) as (${sql})
29
+ select id, name, email from data where name = any($1)`, [values]);
30
+
31
+ if (!rows?.length) {
32
+ return null;
33
+ }
34
+
35
+ const message = `${data.body?.substring(0, 50)}...`;
36
+ const subject = 'You were mentioned';
37
+
38
+ await sequence(rows, {}, async ({ id, name, email }) => {
39
+ const res = await addNotification({
40
+ pg, funcs, session, subject, entity: data.entity_id, body: message, link, uid: id,
41
+ });
42
+ try {
43
+ const res1 = await sendNotification({
44
+ pg,
45
+ funcs,
46
+ log,
47
+ to: email,
48
+ // template,
49
+ message,
50
+ title: subject,
51
+ data,
52
+ nocache: 1,
53
+ });
54
+ if (config.local) console.info('comment notification', name, id, email, res1);
55
+ await pg.query('update crm.notifications set sent=true where notification_id=$1', [res?.notification_id]);
56
+ }
57
+ catch (err) {
58
+ console.error('comment notification send error', err.toString());
59
+ }
60
+ });
61
+ console.log('comment notification add', rows);
62
+ return null;
63
+ }
@@ -1,40 +1,40 @@
1
- import { addHook } from '@opengis/fastify-table/utils.js';
2
-
3
- // api
4
- import readNotifications from './controllers/readNotifications.js'; // mark as read
5
- import userNotifications from './controllers/userNotifications.js'; // check all, backend pagination
6
- // hook
7
- import onWidgetSet from './hook/onWidgetSet.js'; // send notification on comment
8
-
9
-
10
- const tableSchema = {
11
- params: {
12
- id: { type: 'string' },
13
- },
14
- querystring: {
15
- nocache: { type: 'string', pattern: '^(\\d+)$' },
16
- },
17
- };
18
-
19
- export default async function plugin(fastify, config = {}) {
20
- const prefix = config.prefix || '/api';
21
- fastify.route({
22
- method: 'GET',
23
- url: '/notification',
24
- config: {
25
- policy: ['user'],
26
- },
27
- schema: tableSchema,
28
- handler: userNotifications,
29
- });
30
- fastify.route({
31
- method: 'GET',
32
- url: '/notification-read/:id?',
33
- config: {
34
- policy: ['user'],
35
- },
36
- schema: tableSchema,
37
- handler: readNotifications,
38
- });
39
- addHook('onWidgetSet', onWidgetSet);
40
- }
1
+ import { addHook } from '@opengis/fastify-table/utils.js';
2
+
3
+ // api
4
+ import readNotifications from './controllers/readNotifications.js'; // mark as read
5
+ import userNotifications from './controllers/userNotifications.js'; // check all, backend pagination
6
+ // hook
7
+ import onWidgetSet from './hook/onWidgetSet.js'; // send notification on comment
8
+
9
+
10
+ const tableSchema = {
11
+ params: {
12
+ id: { type: 'string' },
13
+ },
14
+ querystring: {
15
+ nocache: { type: 'string', pattern: '^(\\d+)$' },
16
+ },
17
+ };
18
+
19
+ export default async function plugin(fastify, config = {}) {
20
+ const prefix = config.prefix || '/api';
21
+ fastify.route({
22
+ method: 'GET',
23
+ url: '/notification',
24
+ config: {
25
+ policy: ['user'],
26
+ },
27
+ schema: tableSchema,
28
+ handler: userNotifications,
29
+ });
30
+ fastify.route({
31
+ method: 'GET',
32
+ url: '/notification-read/:id?',
33
+ config: {
34
+ policy: ['user'],
35
+ },
36
+ schema: tableSchema,
37
+ handler: readNotifications,
38
+ });
39
+ addHook('onWidgetSet', onWidgetSet);
40
+ }
@@ -1,29 +1,29 @@
1
- const table = 'admin.properties';
2
-
3
- import { getRedis } from '@opengis/fastify-table/utils.js';
4
-
5
- import { getSettings } from '../../../../utils.js';
6
-
7
- export default async function getSettingsAPI({
8
- pg = {}, funcs = {}, params = {}, query = {},
9
- }) {
10
- if (!pg.pk?.[table]) {
11
- return { message: 'table not found', status: 404 };
12
- }
13
-
14
- const redis = getRedis();
15
- const keyCache = `${pg.options?.database}:settings:${params?.key || 'all'}:${query?.json ? 'json' : 'plain'}:${table}`;
16
-
17
- const cache = await redis.get(keyCache);
18
- if (cache && !funcs.config?.local) return JSON.parse(cache);
19
-
20
- try {
21
- const res = await getSettings({
22
- pg, key: params.key, json: query.json, redis, table,
23
- });
24
- return { message: res, status: 200 };
25
- }
26
- catch (err) {
27
- return { error: err.toString(), status: 500 };
28
- }
29
- }
1
+ const table = 'admin.properties';
2
+
3
+ import { getRedis } from '@opengis/fastify-table/utils.js';
4
+
5
+ import { getSettings } from '../../../../utils.js';
6
+
7
+ export default async function getSettingsAPI({
8
+ pg = {}, funcs = {}, params = {}, query = {},
9
+ }) {
10
+ if (!pg.pk?.[table]) {
11
+ return { message: 'table not found', status: 404 };
12
+ }
13
+
14
+ const redis = getRedis();
15
+ const keyCache = `${pg.options?.database}:settings:${params?.key || 'all'}:${query?.json ? 'json' : 'plain'}:${table}`;
16
+
17
+ const cache = await redis.get(keyCache);
18
+ if (cache && !funcs.config?.local) return JSON.parse(cache);
19
+
20
+ try {
21
+ const res = await getSettings({
22
+ pg, key: params.key, json: query.json, redis, table,
23
+ });
24
+ return { message: res, status: 200 };
25
+ }
26
+ catch (err) {
27
+ return { error: err.toString(), status: 500 };
28
+ }
29
+ }
@@ -1,34 +1,34 @@
1
- const table = 'admin.user_properties';
2
-
3
- import { getRedis } from '@opengis/fastify-table/utils.js';
4
-
5
- import { getSettings } from '../../../../utils.js';
6
-
7
- export default async function getUserProperties({
8
- pg = {}, params = {}, query = {}, session = {},
9
- }) {
10
- const { uid } = session.passport?.user || {};
11
- if (!uid) {
12
- return { message: 'access restreicted', status: 403 };
13
- }
14
-
15
- if (!pg.pk?.[table]) {
16
- return { message: 'table not found', status: 404 };
17
- }
18
-
19
- const redis = getRedis();
20
- const keyCache = `${pg.options?.database}:settings:${params?.key || 'all'}:${query?.json ? 'json' : 'plain'}:user`;
21
-
22
- const cache = await redis.get(keyCache);
23
- if (cache) return JSON.parse(cache);
24
-
25
- try {
26
- const res = await getSettings({
27
- pg, key: params.key, json: query.json, redis, table, uid,
28
- });
29
- return { message: res, status: 200 };
30
- }
31
- catch (err) {
32
- return { error: err.toString(), status: 500 };
33
- }
34
- }
1
+ const table = 'admin.user_properties';
2
+
3
+ import { getRedis } from '@opengis/fastify-table/utils.js';
4
+
5
+ import { getSettings } from '../../../../utils.js';
6
+
7
+ export default async function getUserProperties({
8
+ pg = {}, params = {}, query = {}, session = {},
9
+ }) {
10
+ const { uid } = session.passport?.user || {};
11
+ if (!uid) {
12
+ return { message: 'access restreicted', status: 403 };
13
+ }
14
+
15
+ if (!pg.pk?.[table]) {
16
+ return { message: 'table not found', status: 404 };
17
+ }
18
+
19
+ const redis = getRedis();
20
+ const keyCache = `${pg.options?.database}:settings:${params?.key || 'all'}:${query?.json ? 'json' : 'plain'}:user`;
21
+
22
+ const cache = await redis.get(keyCache);
23
+ if (cache) return JSON.parse(cache);
24
+
25
+ try {
26
+ const res = await getSettings({
27
+ pg, key: params.key, json: query.json, redis, table, uid,
28
+ });
29
+ return { message: res, status: 200 };
30
+ }
31
+ catch (err) {
32
+ return { error: err.toString(), status: 500 };
33
+ }
34
+ }
@@ -1,30 +1,30 @@
1
- const table = 'admin.user_properties';
2
-
3
- import { setSettings } from '../../../../utils.js';
4
-
5
- export default async function postUserProperties({
6
- pg, session = {}, body = {},
7
- }) {
8
- const { uid } = session.passport?.user || {};
9
-
10
- if (!uid) {
11
- return { message: 'access restricted', status: 403 };
12
- }
13
-
14
- const { key, val } = body;
15
-
16
- if ((!key || !val) && !Object.keys(body).length) {
17
- return { message: 'not enough params', status: 400 };
18
- }
19
-
20
- if (!pg?.pk?.[table]) {
21
- return { message: 'table not found', status: 404 };
22
- }
23
-
24
- const res = await setSettings({
25
- pg, key, val, body, table, uid,
26
- });
27
- if (res?.error) return res;
28
-
29
- return { message: res, status: 200 };
30
- }
1
+ const table = 'admin.user_properties';
2
+
3
+ import { setSettings } from '../../../../utils.js';
4
+
5
+ export default async function postUserProperties({
6
+ pg, session = {}, body = {},
7
+ }) {
8
+ const { uid } = session.passport?.user || {};
9
+
10
+ if (!uid) {
11
+ return { message: 'access restricted', status: 403 };
12
+ }
13
+
14
+ const { key, val } = body;
15
+
16
+ if ((!key || !val) && !Object.keys(body).length) {
17
+ return { message: 'not enough params', status: 400 };
18
+ }
19
+
20
+ if (!pg?.pk?.[table]) {
21
+ return { message: 'table not found', status: 404 };
22
+ }
23
+
24
+ const res = await setSettings({
25
+ pg, key, val, body, table, uid,
26
+ });
27
+ if (res?.error) return res;
28
+
29
+ return { message: res, status: 200 };
30
+ }