@opengis/admin 0.2.132 → 0.2.133

Sign up to get free protection for your applications and to get access to all the features.
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
- }