@opengis/admin 0.2.132 → 0.2.133

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengis/admin",
3
- "version": "0.2.132",
3
+ "version": "0.2.133",
4
4
  "description": "This project Softpro Admin",
5
5
  "main": "dist/admin.js",
6
6
  "type": "module",
@@ -1,13 +1,11 @@
1
1
  const table = 'admin.properties';
2
2
 
3
- import { config, getRedis, pgClients, getTemplatePath, getTemplate } from '@opengis/fastify-table/utils.js';
3
+ import { pgClients, getTemplatePath, getTemplate } from '@opengis/fastify-table/utils.js';
4
4
 
5
- import { getSettings } from '../../../../utils.js';
6
5
 
7
- const redis = getRedis();
8
6
 
9
7
  export default async function getSettingsApp({
10
- pg = pgClients.client, params = {}, query = {},
8
+ pg = pgClients.client,
11
9
  }) {
12
10
  const time = Date.now();
13
11
  if (!pg.pk?.[table]) {
@@ -21,13 +19,13 @@ export default async function getSettingsApp({
21
19
  return JSON.parse(cache);
22
20
  }*/
23
21
 
24
- const settings = await getSettings({
25
- pg, key: params.key, json: query.json, redis, table,
26
- });
22
+ const { rows } = await pgClients.client.query("select property_key as key,property_text as val from admin.properties /*where property_key~'^(site|map)'*/");
23
+ const settings = rows.reduce((p, { key, val }) => { const [k1, k2] = key.split('.'); p[k1] = p[k1] || {}; p[k1][k2] = val; return p }, {});
24
+ const settings1 = rows.reduce((p, { key, val }) => ({ ...p, [key]: val }), {});
27
25
 
28
26
  const forms = await Promise.all(getTemplatePath('setting')
29
27
  .map(async (el) => ({ name: el[0], body: await getTemplate('setting', el[0]) }))
30
28
  );
31
29
 
32
- return { message: { time: Date.now() - time, forms, settings }, status: 200 };
30
+ return { message: { time: Date.now() - time, forms, settings: settings1 }, status: 200 };
33
31
  }
@@ -1,9 +1,21 @@
1
1
  const table = 'admin.properties';
2
2
 
3
- import { setSettings } from '../../../../utils.js';
3
+ import { dataInsert } from '@opengis/fastify-table/utils.js';
4
+
5
+ function checkValueType(val) {
6
+ if (val) {
7
+ if (typeof val === 'object') {
8
+ return 'property_json';
9
+ }
10
+ if (typeof val === 'number' && (!/\D/.test(val.toString()) && val.toString().length < 10)) {
11
+ return 'property_int';
12
+ }
13
+ }
14
+ return 'property_text';
15
+ }
4
16
 
5
17
  export default async function postSettingsApp({
6
- pg, user = {}, body = {},
18
+ pg, user = {}, body = {}, uid
7
19
  }) {
8
20
  if (!user?.user_type?.includes?.('admin')) {
9
21
  return { message: 'access restricted', status: 403 };
@@ -16,11 +28,20 @@ export default async function postSettingsApp({
16
28
  if (!pg?.pk?.[table]) {
17
29
  return { message: 'table not found', status: 404 };
18
30
  }
31
+ const keys = Object.keys(body);
32
+ await pg.query(`delete from ${table} where property_key=any($1)`, [keys]);
33
+
34
+ await Promise.all(keys.map(async (el) => {
35
+ const columnType = table === 'admin.user_properties' ? 'property_json' : checkValueType(body[el]);
36
+ const data = { property_key: el, [columnType]: body[el], uid };
37
+ if (!body[el]) return;
38
+ await dataInsert({
39
+ pg, table, data, uid,
40
+ });
41
+
42
+ }));
43
+
19
44
 
20
- const res = await setSettings({
21
- pg, key, val, body,
22
- });
23
- if (res?.error) return res;
24
45
 
25
- return { message: res, status: 200 };
46
+ return { message: 'ok', status: 200 };
26
47
  }
@@ -1,11 +1,8 @@
1
1
  const table = 'admin.user_properties';
2
2
 
3
- import { getRedis } from '@opengis/fastify-table/utils.js';
4
-
5
- import { getSettings } from '../../../../utils.js';
6
3
 
7
4
  export default async function getSettingsUser({
8
- pg = {}, params = {}, query = {}, session = {},
5
+ pg = {}, session = {},
9
6
  }) {
10
7
  const { uid } = session.passport?.user || {};
11
8
  if (!uid) {
@@ -16,15 +13,7 @@ export default async function getSettingsUser({
16
13
  return { message: 'table not found', status: 404 };
17
14
  }
18
15
 
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
16
 
25
- const res = await getSettings({
26
- pg, key: params.key, json: query.json, redis, table, uid,
27
- });
28
17
 
29
- return { message: res, status: 200 };
18
+ return { message: 'user', status: 200 };
30
19
  }
@@ -1,30 +1,10 @@
1
1
  const table = 'admin.user_properties';
2
2
 
3
- import { setSettings } from '../../../../utils.js';
3
+
4
4
 
5
5
  export default async function postSettingsUser({
6
6
  pg, session = {}, body = {},
7
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
8
 
29
- return { message: res, status: 200 };
9
+ return { message: 'ok', status: 200 };
30
10
  }
@@ -1,8 +1,8 @@
1
1
  import getSettingsApp from './controllers/admin.properties.get.js';
2
2
  import postSettingsApp from './controllers/admin.properties.post.js';
3
3
 
4
- import getSettingsUser from './controllers/user.properties.get.js';
5
- import postSettingsUser from './controllers/user.properties.post.js';
4
+ //import getSettingsUser from './controllers/user.properties.get.js';
5
+ //import postSettingsUser from './controllers/user.properties.post.js';
6
6
 
7
7
  import getSettingsTable from './controllers/table.properties.get.js';
8
8
  import postSettingsTable from './controllers/table.properties.post.js';
@@ -13,8 +13,8 @@ export default async function route(fastify) {
13
13
  fastify.get('/settings-app/:key?', { scheme: propertiesSchema }, getSettingsApp);
14
14
  fastify.post('/settings-app', { config: { policy: ['admin'] } }, postSettingsApp);
15
15
 
16
- fastify.get('/settings-user/:key?', { scheme: propertiesSchema }, getSettingsUser);
17
- fastify.post('/settings-user', {}, postSettingsUser);
16
+ //fastify.get('/settings-user/:key?', { scheme: propertiesSchema }, getSettingsUser);
17
+ // fastify.post('/settings-user', {}, postSettingsUser);
18
18
 
19
19
  fastify.get('/settings-table/:table/:entity?', {}, getSettingsTable);
20
20
  fastify.post('/settings-table/:table', {}, postSettingsTable);
package/utils.js CHANGED
@@ -1,14 +1,13 @@
1
1
  import yamlSafe from 'js-yaml';
2
2
 
3
- import getSettings from './server/routes/properties/funcs/getSettings.js';
4
- import setSettings from './server/routes/properties/funcs/setSettings.js';
3
+
5
4
 
6
5
  import addNotification from './server/routes/notifications/funcs/addNotification.js';
7
6
  import sendNotification from './server/routes/notifications/funcs/sendNotification.js';
8
7
 
9
8
  import getAdminAccess from './server/plugins/access/funcs/getAdminAccess.js';
10
9
 
11
- function loadSafe (yml) {
10
+ function loadSafe(yml) {
12
11
  try {
13
12
  return yamlSafe.load(yml);
14
13
  } catch (err) {
@@ -21,8 +20,6 @@ Object.assign(yamlSafe, { loadSafe });
21
20
  export default null;
22
21
  export {
23
22
  yamlSafe,
24
- getSettings,
25
- setSettings,
26
23
  addNotification,
27
24
  sendNotification,
28
25
  getAdminAccess,
@@ -1,56 +0,0 @@
1
- import { getMeta } from '@opengis/fastify-table/utils.js';
2
-
3
- const match = {
4
- property_key: 'key',
5
- property_json: 'json',
6
- property_int: 'int',
7
- property_text: 'text',
8
- };
9
-
10
- function getQuery({
11
- table, columns = [], key, uid,
12
- }) {
13
- const columnList = columns?.filter((el) => match[el?.name]).map((el) => el?.name).map((el) => `${el} as ${match[el]}`);
14
- const sql = `select ${columnList.join(',')} from ${table} where 1=1`;
15
-
16
- if (table === 'admin.user_properties') {
17
- const args = [uid, key].filter((el) => el);
18
- const q = sql + (uid ? ' and uid=$1' : '') + (key ? ` and property_key=$${args.indexOf(key) + 1}` : '');
19
- return { q, args };
20
- }
21
- const args = [key].filter((el) => el);
22
- const q = sql + (key ? ` and property_key=$${args.indexOf(key) + 1}` : '');
23
- return { q, args };
24
- }
25
-
26
- export default async function getSettings({
27
- pg, redis, json, key, table = 'admin.properties', uid,
28
- }) {
29
- const { columns = [] } = await getMeta({ table });
30
-
31
- const { q, args } = getQuery({
32
- table, columns, key, uid,
33
- });
34
-
35
- const { rows } = await pg.query(q, args);
36
- const data = rows?.reduce((acc, curr) => Object.assign(acc, { [curr.key]: curr.json || curr.int || curr.text }), {});
37
-
38
- const jsonData = Object.keys(data || {}).reduce((acc, curr) => {
39
- const [ckey, csubkey] = curr.split('.');
40
- if (!csubkey) return Object.assign(acc, { [curr]: data[curr] });
41
- if (!acc[ckey]) Object.assign(acc, { [ckey]: {} });
42
- Object.assign(acc[ckey], { [csubkey]: data[curr] });
43
- return acc;
44
- }, {});
45
-
46
- // save both
47
- if (redis) {
48
- const keyCacheJSON = `${pg.options?.database}:settings:${key || 'all'}:json:${table}`;
49
- await redis.set(keyCacheJSON, JSON.stringify(jsonData));
50
-
51
- const keyCachePlain = `${pg.options?.database}:settings:${key || 'all'}:plain:${table}`;
52
- await redis.set(keyCachePlain, JSON.stringify(data));
53
- }
54
-
55
- return json ? jsonData : data;
56
- }
@@ -1,44 +0,0 @@
1
- import { getRedis } from '@opengis/fastify-table/utils.js';
2
-
3
- import { getSettings } from '../../../../utils.js';
4
- import dataInsert from '../utils/dataInsert.js';
5
-
6
- function checkValueType(val) {
7
- if (val) {
8
- if (typeof val === 'object') {
9
- return 'property_json';
10
- }
11
- if (typeof val === 'number' && (!/\D/.test(val.toString()) && val.toString().length < 10)) {
12
- return 'property_int';
13
- }
14
- }
15
- return 'property_text';
16
- }
17
-
18
- export default async function setSettings({
19
- pg, key, val, body = {}, table = 'admin.properties', uid,
20
- }) {
21
- const body1 = key && val ? { [key]: val } : body;
22
- const keys = Object.keys(body1);
23
- try {
24
- const redis = getRedis();
25
- await pg.query(`delete from ${table} where property_key=any($1)`, [keys]);
26
-
27
- await Promise.all(keys.map(async (el) => {
28
- const columnType = table === 'admin.user_properties' ? 'property_json' : checkValueType(body1[el]);
29
- const data = { property_key: el, [columnType]: body1[el], uid };
30
- const { rows } = await dataInsert({
31
- pg, table, data, uid,
32
- });
33
- return { key: el, rows: { val: body[el], data: rows?.[0] } };
34
- }));
35
-
36
- const res = await getSettings({
37
- pg, redis, table, uid,
38
- });
39
- return res;
40
- }
41
- catch (err) {
42
- return { error: err.toString(), status: 500 };
43
- }
44
- }