@digione/node-custom-api 0.1.8-beta1 → 0.1.9

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": "@digione/node-custom-api",
3
- "version": "0.1.8-beta1",
3
+ "version": "0.1.9",
4
4
  "description": "Typescript node digione-api",
5
5
  "author": "Monchai Jirayupong <monchai.j@seven.co.th>",
6
6
  "license": "MIT",
package/utils/helper.d.ts CHANGED
@@ -18,8 +18,9 @@ export declare const getTimestampMysql: (date?: any) => number;
18
18
  export declare const getDateTime: (time?: any, { utc }?: {
19
19
  utc?: boolean;
20
20
  }) => moment.Moment;
21
- export declare const getValueFunctionFile: (key: any) => (value: any, { result, fileUtil }?: {
21
+ export declare const getValueFunctionFile: (key: any) => (value: any, { result, json, fileUtil }?: {
22
22
  result?: {};
23
+ json?: {};
23
24
  fileUtil?: any;
24
25
  }) => Promise<void>;
25
26
  export declare const getValueFunctionLang: (key: any) => (value?: {}, { result, transform, spread, spread_all, raw, lang_code }?: {
package/utils/helper.js CHANGED
@@ -79,8 +79,16 @@ const getDateTime = (time = undefined, { utc = true } = {}) => {
79
79
  };
80
80
  exports.getDateTime = getDateTime;
81
81
  const getValueFunctionFile = (key) => {
82
- return (value, { result = {}, fileUtil = undefined } = {}) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
83
- if (value[key]) {
82
+ return (value, { result = {}, json = {}, fileUtil = undefined } = {}) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
83
+ if (json[key]) {
84
+ try {
85
+ result[key] = JSON.parse(json[key]);
86
+ }
87
+ catch (err) {
88
+ result[key] = null;
89
+ }
90
+ }
91
+ else if (value[key]) {
84
92
  result[key] = yield fileUtil.findOneFileById(value[key]);
85
93
  }
86
94
  });
package/utils/stream.d.ts CHANGED
@@ -5,16 +5,20 @@ import { Request } from 'express';
5
5
  import * as Joi from 'joi';
6
6
  export declare const getValueFunctionRelationship: (key: any, { field_data }?: {
7
7
  field_data?: {};
8
- }) => (value: any, { result, ref, lang_code }?: {
8
+ }) => (value: any, { result, json, ref, raw, lang_code }?: {
9
9
  result?: {};
10
+ json?: {};
10
11
  ref?: string;
12
+ raw?: boolean;
11
13
  lang_code?: string;
12
14
  }) => Promise<void>;
13
15
  export declare const getValueFunctionMultiple: (key: any, { field_data }?: {
14
16
  field_data?: {};
15
- }) => (value: any, { result, ref, lang_code }?: {
17
+ }) => (value: any, { result, json, ref, raw, lang_code }?: {
16
18
  result?: {};
19
+ json?: {};
17
20
  ref?: string;
21
+ raw?: boolean;
18
22
  lang_code?: string;
19
23
  }) => Promise<void>;
20
24
  interface Field {
@@ -71,14 +75,16 @@ export declare class StreamUtil {
71
75
  include?: any;
72
76
  include_only?: boolean;
73
77
  }): any;
74
- buildStream(slug: string, namespace: string, { query, builder, fetch, attribute, attributes, field_exclude, include }?: {
78
+ buildStream(slug: string, namespace: string, { query, builder, fetch, label, attribute, attributes, field_exclude, include, include_all }?: {
75
79
  query?: boolean;
76
80
  builder?: boolean;
77
81
  fetch?: boolean;
82
+ label?: boolean;
78
83
  attribute?: boolean;
79
84
  attributes?: any;
80
85
  field_exclude?: any[];
81
86
  include?: {};
87
+ include_all?: boolean;
82
88
  }): Promise<{
83
89
  stream: any;
84
90
  fields: any;
@@ -99,6 +105,18 @@ export declare class StreamUtil {
99
105
  raw?: boolean;
100
106
  lang_code?: any;
101
107
  }): Promise<{}>;
108
+ getValueByJson(slug: string, namespace: string, value: any, json: any, { query, lang_code }?: {
109
+ query?: boolean;
110
+ lang_code?: any;
111
+ }): Promise<{}>;
112
+ getStoreJson(slug: string, namespace: string, value: any, { query, lang_code, exclude_type }?: {
113
+ query?: boolean;
114
+ lang_code?: any;
115
+ exclude_type?: {};
116
+ }): Promise<{
117
+ result: {};
118
+ labels: any[];
119
+ }>;
102
120
  genField(streams: Array<any>, { index, option, slug, id_stream, prefix, multiple_table, multiple_spread, addition, convert_option, field_option, default_value, default_lang, lang_code, no_lang, lang, country, section }?: {
103
121
  index?: string;
104
122
  option?: {};
package/utils/stream.js CHANGED
@@ -24,10 +24,22 @@ const i18n_1 = require("i18n");
24
24
  const _ = require("lodash");
25
25
  const Joi = require("joi");
26
26
  const getValueFunctionRelationship = (key, { field_data = {} } = {}) => {
27
- return (value, { result = {}, ref = '', lang_code = '' } = {}) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
28
- if (value[key] && field_data['table']) {
27
+ return (value, { result = {}, json = {}, ref = '', raw = false, lang_code = '' } = {}) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
28
+ if (field_data['table']) {
29
29
  let title_column = field_data['title_column'] || "title";
30
- result[key] = yield (0, db_1.findOne)(ref + '_' + field_data['table'], { where: { id: value[key] }, attributes: ['*'] });
30
+ if (json[key]) {
31
+ try {
32
+ result[key] = JSON.parse(json[key]);
33
+ }
34
+ catch (err) {
35
+ result[key] = null;
36
+ }
37
+ }
38
+ else if (value[key]) {
39
+ result[key] = yield (0, db_1.findOne)(ref + '_' + field_data['table'], { where: { id: value[key] }, attributes: ['*'] });
40
+ }
41
+ if (raw)
42
+ return;
31
43
  if (result[key]) {
32
44
  (0, helper_2.getValueFunctionLang)(title_column)(result[key], { result: result[key], lang_code });
33
45
  }
@@ -36,10 +48,22 @@ const getValueFunctionRelationship = (key, { field_data = {} } = {}) => {
36
48
  };
37
49
  exports.getValueFunctionRelationship = getValueFunctionRelationship;
38
50
  const getValueFunctionMultiple = (key, { field_data = {} } = {}) => {
39
- return (value, { result = {}, ref = '', lang_code = '' } = {}) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
40
- if (field_data['association'] && field_data['table']) {
51
+ return (value, { result = {}, json = {}, ref = '', raw = false, lang_code = '' } = {}) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
52
+ if (field_data['table']) {
41
53
  let title_column = field_data['title_column'] || "title";
42
- result[key] = yield (0, db_1.findAll)(ref + '_' + field_data['table'], { where: { [`m.row_id`]: { [sequelize_1.Op.eq]: value['id'] } }, attributes: [`${ref + '_' + field_data['table']}.*`], association: [`INNER JOIN ${ref}_${field_data['association']} m ON ${ref + '_' + field_data['table']}.id = m.${field_data['table'] + '_id'}`] });
54
+ if (json[key]) {
55
+ try {
56
+ result[key] = JSON.parse(json[key]);
57
+ }
58
+ catch (err) {
59
+ result[key] = [];
60
+ }
61
+ }
62
+ else if (field_data['association']) {
63
+ result[key] = yield (0, db_1.findAll)(ref + '_' + field_data['table'], { where: { [`m.row_id`]: { [sequelize_1.Op.eq]: value['id'] } }, attributes: [`${ref + '_' + field_data['table']}.*`], association: [`INNER JOIN ${ref}_${field_data['association']} m ON ${ref + '_' + field_data['table']}.id = m.${field_data['table'] + '_id'}`] });
64
+ }
65
+ if (raw)
66
+ return;
43
67
  if (result[key] && result[key].length) {
44
68
  result[key] = result[key].map(i => (0, helper_2.getValueByLang)(i, { result: i, field: [title_column], lang_code }));
45
69
  }
@@ -211,7 +235,7 @@ class StreamUtil {
211
235
  }
212
236
  return data;
213
237
  }
214
- buildStream(slug, namespace, { query = true, builder = true, fetch = false, attribute = false, attributes = null, field_exclude = [], include = {} } = {}) {
238
+ buildStream(slug, namespace, { query = true, builder = true, fetch = false, label = false, attribute = false, attributes = null, field_exclude = [], include = {}, include_all = false } = {}) {
215
239
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
216
240
  let build = this.builder[slug + "_" + namespace] || { stream: null, fields: null, fetchFn: [], attributes: null };
217
241
  if (!build['fields']) {
@@ -222,7 +246,7 @@ class StreamUtil {
222
246
  build['stream'] = _.omit(data, ['fields']);
223
247
  }
224
248
  if ((fetch || attribute) && build['fields'].length) {
225
- let fetchFn = [];
249
+ let fetchFn = [], fetchLabel = [];
226
250
  attributes = attributes || {};
227
251
  for (let field of build['fields']) {
228
252
  let field_data = field['field_data'] || {};
@@ -232,24 +256,30 @@ class StreamUtil {
232
256
  }
233
257
  if (fetch) {
234
258
  if (field['is_lang'] == "yes") {
259
+ label && fetchLabel.push(field);
235
260
  fetchFn.push((0, helper_2.getValueFunctionLang)(field['field_slug']));
236
261
  }
237
262
  else {
238
263
  switch (field['field_type']) {
239
264
  case "file":
240
265
  case "image":
241
- include[field['field_slug']] && fetchFn.push((0, helper_2.getValueFunctionFile)(field['field_slug']));
266
+ if (include[field['field_slug']] || include_all) {
267
+ label && fetchLabel.push(field);
268
+ fetchFn.push((0, helper_2.getValueFunctionFile)(field['field_slug']));
269
+ }
242
270
  break;
243
271
  case "relationship":
244
272
  case "multiple":
245
- if (include[field['field_slug']] && field_data['choose_stream']) {
273
+ if ((include[field['field_slug']] || include_all) && field_data['choose_stream']) {
246
274
  let stream = yield stream_1.StreamModel.schema(this.ref, "_").findOne({ where: { id: field_data['choose_stream'] }, raw: true, attributes: ['stream_slug', 'stream_prefix', 'title_column'] });
247
275
  if (stream['stream_slug']) {
248
276
  field_data['table'] = stream['stream_prefix'] ? stream['stream_prefix'] + stream['stream_slug'] : stream['stream_slug'];
249
277
  if (field['field_type'] == "relationship") {
278
+ label && fetchLabel.push(field);
250
279
  fetchFn.push((0, exports.getValueFunctionRelationship)(field['field_slug'], { field_data }));
251
280
  }
252
281
  else if (field['field_type'] == "multiple") {
282
+ label && fetchLabel.push(field);
253
283
  field_data['association'] = (build['stream']['stream_prefix'] ? build['stream']['stream_prefix'] + build['stream']['stream_slug'] : build['stream']['stream_slug']) + "_" + field_data['table'];
254
284
  fetchFn.push((0, exports.getValueFunctionMultiple)(field['field_slug'], { field_data }));
255
285
  }
@@ -259,11 +289,12 @@ class StreamUtil {
259
289
  }
260
290
  }
261
291
  }
262
- if (field['field_type'] == "multiple" || field['field_type'] == "any") {
292
+ if ((field['field_type'] == "multiple" && field_data['self_table'] != "yes") || field['field_type'] == "any") {
263
293
  delete attributes[field['field_slug']];
264
294
  }
265
295
  }
266
296
  build['fetchFn'] = fetchFn;
297
+ build['fetchLabel'] = fetchLabel;
267
298
  }
268
299
  if (attributes)
269
300
  build['attributes'] = attributes;
@@ -289,6 +320,33 @@ class StreamUtil {
289
320
  return result;
290
321
  });
291
322
  }
323
+ getValueByJson(slug, namespace, value, json, { query = false, lang_code = undefined } = {}) {
324
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
325
+ let result = {};
326
+ let fetchFn = yield this.getBuilder(slug, namespace, { query, index: "fetchFn" });
327
+ lang_code = lang_code || this.option.lang_code;
328
+ for (let f of fetchFn || []) {
329
+ yield f(value, { result, json, ref: this.ref, lang_code, fileUtil: this.fileUtil });
330
+ }
331
+ return result;
332
+ });
333
+ }
334
+ getStoreJson(slug, namespace, value, { query = false, lang_code = undefined, exclude_type = {} } = {}) {
335
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
336
+ let result = {}, labels = [];
337
+ let fetchLabel = yield this.getBuilder(slug, namespace, { query, index: "fetchLabel" });
338
+ lang_code = lang_code || this.option.lang_code;
339
+ for (let f of fetchLabel || []) {
340
+ let field_slug = f['field_slug'];
341
+ let field_type = f['field_type'];
342
+ if (field_slug && !exclude_type[field_type] && typeof value[field_slug] != "undefined") {
343
+ labels.push(field_slug);
344
+ result[field_slug] = JSON.stringify(value[field_slug]);
345
+ }
346
+ }
347
+ return { result, labels };
348
+ });
349
+ }
292
350
  genField(streams, { index = "", option = {}, slug = "", id_stream = "", prefix = "", multiple_table = false, multiple_spread = false, addition = {}, convert_option = true, field_option = {}, default_value = {}, default_lang = "en", lang_code = "en", no_lang = false, lang = [], country = undefined, section = false } = {}) {
293
351
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
294
352
  let fields = [], sections = [];