@digione/node-custom-api 0.1.9 → 0.2.0-beta1
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/middlewares/paramQuery.d.ts +3 -0
- package/middlewares/paramQuery.js +13 -2
- package/models/system/file.d.ts +1 -0
- package/models/system/file.js +1 -0
- package/package.json +1 -1
- package/utils/auth.d.ts +3 -1
- package/utils/auth.js +8 -3
- package/utils/db.js +4 -4
- package/utils/file.d.ts +12 -7
- package/utils/file.js +34 -28
- package/utils/helper.d.ts +10 -1
- package/utils/helper.js +31 -4
- package/utils/metadata.js +2 -2
- package/utils/stream.d.ts +12 -2
- package/utils/stream.js +44 -7
- package/utils/user.d.ts +2 -2
- package/utils/user.js +20 -11
- package/utils/validator.d.ts +8 -0
- package/utils/validator.js +23 -7
|
@@ -14,3 +14,6 @@ export declare const changeBodyParam: (value?: {}, { skipSystem, omit }?: {
|
|
|
14
14
|
skipSystem?: boolean;
|
|
15
15
|
omit?: any[];
|
|
16
16
|
}) => (req: Request, res: Response, next: any) => any;
|
|
17
|
+
export declare const changeConfigParam: (value?: {}, { skipSystem }?: {
|
|
18
|
+
skipSystem?: boolean;
|
|
19
|
+
}) => (req: Request, res: Response, next: any) => any;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.changeBodyParam = exports.changeOptionParam = exports.changeQueryParam = exports.getQueryParamFile = exports.getQueryParamCUD = exports.getQueryParam = exports.getStremParam = exports.getAuthParam = void 0;
|
|
3
|
+
exports.changeConfigParam = exports.changeBodyParam = exports.changeOptionParam = exports.changeQueryParam = exports.getQueryParamFile = exports.getQueryParamCUD = exports.getQueryParam = exports.getStremParam = exports.getAuthParam = void 0;
|
|
4
4
|
const helper_1 = require("../utils/helper");
|
|
5
5
|
const _ = require("lodash");
|
|
6
6
|
const getAuthParam = (req, res, next) => {
|
|
@@ -127,6 +127,7 @@ const getQueryParam = (req, res, next) => {
|
|
|
127
127
|
};
|
|
128
128
|
exports.getQueryParam = getQueryParam;
|
|
129
129
|
const getQueryParamCUD = (req, res, next) => {
|
|
130
|
+
let config = res.locals.config || {};
|
|
130
131
|
res.locals.option = res.locals.option || {};
|
|
131
132
|
if (req.query.include) {
|
|
132
133
|
try {
|
|
@@ -144,7 +145,7 @@ const getQueryParamCUD = (req, res, next) => {
|
|
|
144
145
|
res.locals.option['records'] = String(req.query.records).split(',');
|
|
145
146
|
}
|
|
146
147
|
if (req.query.ids) {
|
|
147
|
-
res.locals.option['ids'] = String(req.query.ids).split(',').slice(0, 25);
|
|
148
|
+
res.locals.option['ids'] = String(req.query.ids).split(',').slice(0, (config['maxQueryIds'] || 25));
|
|
148
149
|
}
|
|
149
150
|
return (0, exports.getAuthParam)(req, res, () => {
|
|
150
151
|
if (req.query.lang_code) {
|
|
@@ -218,3 +219,13 @@ const changeBodyParam = (value = {}, { skipSystem = false, omit = [] } = {}) =>
|
|
|
218
219
|
return next();
|
|
219
220
|
};
|
|
220
221
|
exports.changeBodyParam = changeBodyParam;
|
|
222
|
+
const changeConfigParam = (value = {}, { skipSystem = false } = {}) => (req, res, next) => {
|
|
223
|
+
if (skipSystem && req.params.web_system_token) {
|
|
224
|
+
let bol = (typeof req.params.web != "undefined") || (req.params.web_system == req.params.web);
|
|
225
|
+
if (bol)
|
|
226
|
+
return next();
|
|
227
|
+
}
|
|
228
|
+
res.locals.config = Object.assign(Object.assign({}, res.locals.config || {}), value);
|
|
229
|
+
return next();
|
|
230
|
+
};
|
|
231
|
+
exports.changeConfigParam = changeConfigParam;
|
package/models/system/file.d.ts
CHANGED
|
@@ -90,6 +90,7 @@ export declare const FileAttr: {
|
|
|
90
90
|
upload: sequelize.TinyIntegerDataType;
|
|
91
91
|
custom: sequelize.AbstractDataTypeConstructor;
|
|
92
92
|
tags: sequelize.AbstractDataTypeConstructor;
|
|
93
|
+
group: sequelize.StringDataType;
|
|
93
94
|
file_link: sequelize.EnumDataType<"no" | "yes">;
|
|
94
95
|
file_id: sequelize.StringDataType;
|
|
95
96
|
uid: sequelize.StringDataType;
|
package/models/system/file.js
CHANGED
|
@@ -95,6 +95,7 @@ exports.FileAttr = {
|
|
|
95
95
|
upload: sequelize.TINYINT({ length: 1 }),
|
|
96
96
|
custom: sequelize.JSON,
|
|
97
97
|
tags: sequelize.JSON,
|
|
98
|
+
group: sequelize.STRING({ length: 20 }),
|
|
98
99
|
file_link: sequelize.ENUM('no', 'yes'),
|
|
99
100
|
file_id: sequelize.STRING({ length: 15 }),
|
|
100
101
|
uid: sequelize.STRING({ length: 100 })
|
package/package.json
CHANGED
package/utils/auth.d.ts
CHANGED
|
@@ -3,8 +3,10 @@ export declare const getTokenFromReq: (req: any) => any;
|
|
|
3
3
|
export declare class AuthUtil {
|
|
4
4
|
ref: string;
|
|
5
5
|
constructor(ref: string);
|
|
6
|
-
create(id: any, { include }?: {
|
|
6
|
+
create(id: any, { include, include_token, setting }?: {
|
|
7
7
|
include?: {};
|
|
8
|
+
include_token?: {};
|
|
9
|
+
setting?: {};
|
|
8
10
|
}): Promise<{
|
|
9
11
|
refresh_token: string;
|
|
10
12
|
access_token: string;
|
package/utils/auth.js
CHANGED
|
@@ -11,7 +11,7 @@ const authError_1 = require("../errors/authError");
|
|
|
11
11
|
const jwt = require("jsonwebtoken");
|
|
12
12
|
const signToken = (id, expIn, opt = {}) => {
|
|
13
13
|
const date = (0, helper_1.getDateTime)();
|
|
14
|
-
return jwt.sign(Object.assign({ id: id, createAt: date, expAt: date.add(expIn, 'days') }, opt), (0, helper_1.getENV)('JWT_SECRET'));
|
|
14
|
+
return jwt.sign(Object.assign({ id: id, createAt: date, expAt: date.clone().add(expIn, 'days') }, opt), (0, helper_1.getENV)('JWT_SECRET'));
|
|
15
15
|
};
|
|
16
16
|
const getIdFromReq = (req) => {
|
|
17
17
|
try {
|
|
@@ -30,14 +30,19 @@ class AuthUtil {
|
|
|
30
30
|
constructor(ref) {
|
|
31
31
|
this.ref = ref;
|
|
32
32
|
}
|
|
33
|
-
create(id, { include = {} } = {}) {
|
|
33
|
+
create(id, { include = {}, include_token = {}, setting = {} } = {}) {
|
|
34
34
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
35
35
|
let refreshTokenUUID = (0, helper_1.getUUID)();
|
|
36
36
|
let include_access = {};
|
|
37
37
|
if (Object.keys(include).length) {
|
|
38
38
|
include_access['setting'] = JSON.stringify(include);
|
|
39
39
|
}
|
|
40
|
-
let
|
|
40
|
+
let rf_expire_in = Number(setting['expire_in'] || (0, helper_1.getENV)('REFRESH_TOKEN_AGE', 1));
|
|
41
|
+
let ac_expire_in = Number((0, helper_1.getENV)('ACCESS_TOKEN_AGE', 1));
|
|
42
|
+
if (rf_expire_in < ac_expire_in) {
|
|
43
|
+
ac_expire_in = rf_expire_in;
|
|
44
|
+
}
|
|
45
|
+
let input = Object.assign({ id: refreshTokenUUID, user_id: id, expired_at: (0, helper_1.getDateTime)().add(rf_expire_in, 'days'), token: signToken(id, rf_expire_in, Object.assign({ refresh_token_id: refreshTokenUUID }, include_token)), accessToken: Object.assign({ user_id: id, expired_at: (0, helper_1.getDateTime)().add(ac_expire_in, 'days'), token: signToken(id, ac_expire_in, Object.assign({ refresh_token_id: refreshTokenUUID }, include_token)) }, include_access) }, include);
|
|
41
46
|
yield refresh_token_1.RefreshTokenModel.schema(this.ref, "_").create(input, {
|
|
42
47
|
include: [
|
|
43
48
|
{
|
package/utils/db.js
CHANGED
|
@@ -32,12 +32,12 @@ const getWhereVal = (smth) => {
|
|
|
32
32
|
return [key, value].join(` ${smth.comparator} `);
|
|
33
33
|
};
|
|
34
34
|
const genWhere = (where = {}, { as = "", delimiter = ".", prefix = true, bracket = false } = {}) => {
|
|
35
|
-
|
|
35
|
+
let keyPrefix = as ? "`" + as + "`" + delimiter : as;
|
|
36
36
|
let symbolKeys = Object.getOwnPropertySymbols(where);
|
|
37
37
|
let rawWhere = (Object.keys(where).concat(symbolKeys)).reduce((result, key) => {
|
|
38
38
|
let value = where[key];
|
|
39
39
|
if (typeof value !== 'undefined') {
|
|
40
|
-
key = typeof (
|
|
40
|
+
key = typeof (key) == "string" ? keyPrefix + "`" + (key.split('.').join("`.`")) + "`" : key;
|
|
41
41
|
if (typeof (value) == "string") {
|
|
42
42
|
value = SqlString.escape(value);
|
|
43
43
|
}
|
|
@@ -48,7 +48,7 @@ const genWhere = (where = {}, { as = "", delimiter = ".", prefix = true, bracket
|
|
|
48
48
|
result = `${result}( ${op}) AND `;
|
|
49
49
|
}
|
|
50
50
|
else {
|
|
51
|
-
result =
|
|
51
|
+
result = result + key + ` IN (${value.map(i => "'" + i + "'").join(',')}) AND `;
|
|
52
52
|
}
|
|
53
53
|
return result;
|
|
54
54
|
}
|
|
@@ -62,7 +62,7 @@ const genWhere = (where = {}, { as = "", delimiter = ".", prefix = true, bracket
|
|
|
62
62
|
return result;
|
|
63
63
|
}
|
|
64
64
|
else if (typeof value == "object" && value['val']) {
|
|
65
|
-
result =
|
|
65
|
+
result = result + key + `=${value['val']} AND `;
|
|
66
66
|
return result;
|
|
67
67
|
}
|
|
68
68
|
result = result + key + "=" + value + " AND ";
|
package/utils/file.d.ts
CHANGED
|
@@ -124,11 +124,12 @@ export declare class FileUtil {
|
|
|
124
124
|
tags?: TagFile;
|
|
125
125
|
group?: any;
|
|
126
126
|
}): Promise<any>;
|
|
127
|
-
uploadByReq(req: Request, slug: string, user_id: any, { parent_id, parent_slug, name, root, thumb, width, height, input, is_hidden, tags, group }?: {
|
|
127
|
+
uploadByReq(req: Request, slug: string, user_id: any, { parent_id, parent_slug, name, root, format, thumb, width, height, input, is_hidden, tags, group }?: {
|
|
128
128
|
parent_id?: number;
|
|
129
129
|
parent_slug?: string;
|
|
130
130
|
name?: any;
|
|
131
131
|
root?: boolean;
|
|
132
|
+
format?: boolean;
|
|
132
133
|
thumb?: boolean;
|
|
133
134
|
width?: number;
|
|
134
135
|
height?: number;
|
|
@@ -146,7 +147,7 @@ export declare class FileUtil {
|
|
|
146
147
|
hidden?: number;
|
|
147
148
|
input?: {};
|
|
148
149
|
}): Promise<any>;
|
|
149
|
-
createFileByPath(files: Array<
|
|
150
|
+
createFileByPath(files: Array<any>, slug: string, user_id: any, { parent_slug, type, name, root, upload, tags, group }?: {
|
|
150
151
|
parent_slug?: string;
|
|
151
152
|
type?: string;
|
|
152
153
|
name?: any;
|
|
@@ -156,7 +157,8 @@ export declare class FileUtil {
|
|
|
156
157
|
group?: any;
|
|
157
158
|
}): Promise<any>;
|
|
158
159
|
allowedFileType(extension: any): Promise<any>;
|
|
159
|
-
formatFile(folder_id: any, user_id: any, reqs: Array<any>, files: Array<any>, { use_id, field, formatDateTime, input, is_hidden, tags, group }?: {
|
|
160
|
+
formatFile(folder_id: any, user_id: any, reqs: Array<any>, files: Array<any>, { format, use_id, field, formatDateTime, input, is_hidden, tags, group }?: {
|
|
161
|
+
format?: boolean;
|
|
160
162
|
use_id?: boolean;
|
|
161
163
|
field?: any[];
|
|
162
164
|
formatDateTime?: string;
|
|
@@ -169,7 +171,7 @@ export declare class FileUtil {
|
|
|
169
171
|
user_id: any;
|
|
170
172
|
organ_id: any;
|
|
171
173
|
organ_by: any;
|
|
172
|
-
sort:
|
|
174
|
+
sort: any;
|
|
173
175
|
date_added: string;
|
|
174
176
|
name: any;
|
|
175
177
|
filename: any;
|
|
@@ -179,15 +181,18 @@ export declare class FileUtil {
|
|
|
179
181
|
extension: string;
|
|
180
182
|
type: any;
|
|
181
183
|
is_hidden: any;
|
|
182
|
-
tags:
|
|
184
|
+
tags: any;
|
|
185
|
+
custom: any;
|
|
183
186
|
group: any;
|
|
184
187
|
}[]>;
|
|
185
|
-
insertFileUnique(results: Array<any>, { thumb, width, height }?: {
|
|
188
|
+
insertFileUnique(results: Array<any>, { format, thumb, width, height }?: {
|
|
189
|
+
format?: boolean;
|
|
186
190
|
thumb?: boolean;
|
|
187
191
|
width?: number;
|
|
188
192
|
height?: number;
|
|
189
193
|
}): any;
|
|
190
|
-
uploadRawFormat(files: Array<any>, { field }?: {
|
|
194
|
+
uploadRawFormat(files: Array<any>, { format, field }?: {
|
|
195
|
+
format?: boolean;
|
|
191
196
|
field?: string[];
|
|
192
197
|
}): Promise<any>;
|
|
193
198
|
updateFile(id: string, input?: any, { paths }?: {
|
package/utils/file.js
CHANGED
|
@@ -133,6 +133,7 @@ class FileUtil {
|
|
|
133
133
|
let reqs = [], results = [];
|
|
134
134
|
for (let file of files) {
|
|
135
135
|
let extension = mime.extension(file.mimetype);
|
|
136
|
+
extension = extension ? extension : String(file.mimetype).split('/')[1];
|
|
136
137
|
let input = {
|
|
137
138
|
Bucket: this.bucket,
|
|
138
139
|
Key: this.ref + "/" + (0, helper_1.getDateTime)().format('X') + '.' + (0, helper_1.getSlug)(32) + '.' + extension,
|
|
@@ -256,7 +257,7 @@ class FileUtil {
|
|
|
256
257
|
result[width + 'x' + height] = thumb;
|
|
257
258
|
yield (0, db_1.update)(this.ref, file_1.FileModel.getTableName().toString(), { thumb: JSON.stringify(result) }, { where: { id: item['id'] } });
|
|
258
259
|
}
|
|
259
|
-
if (item['filename'] == path) {
|
|
260
|
+
if (thumb && item['filename'] == path) {
|
|
260
261
|
yield this.getStorage();
|
|
261
262
|
let data = yield this.afterQueryFile({ filename: thumb, path: thumb });
|
|
262
263
|
thumb = data.path;
|
|
@@ -392,7 +393,7 @@ class FileUtil {
|
|
|
392
393
|
return (yield this.findAllFile({ where: Object.assign({ id }, where), full, file_link, parent_folder, limit: 1, tags, group }))[0] || null;
|
|
393
394
|
});
|
|
394
395
|
}
|
|
395
|
-
uploadByReq(req, slug, user_id, { parent_id = 0, parent_slug = "", name = undefined, root = false, thumb = false, width = 0, height = 0, input = {}, is_hidden = undefined, tags = undefined, group = undefined } = {}) {
|
|
396
|
+
uploadByReq(req, slug, user_id, { parent_id = 0, parent_slug = "", name = undefined, root = false, format = false, thumb = false, width = 0, height = 0, input = {}, is_hidden = undefined, tags = undefined, group = undefined } = {}) {
|
|
396
397
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
397
398
|
req.files = req.file ? [req.file] : (req.files || []);
|
|
398
399
|
if (req.files.length && slug) {
|
|
@@ -406,6 +407,7 @@ class FileUtil {
|
|
|
406
407
|
let folder = yield this.createFolder(slug, { parent_id, root, name });
|
|
407
408
|
for (let file of req.files) {
|
|
408
409
|
let extension = mime.extension(file.mimetype);
|
|
410
|
+
extension = extension ? extension : String(file.mimetype).split('/')[1];
|
|
409
411
|
let input = {
|
|
410
412
|
Bucket: this.bucket,
|
|
411
413
|
Key: this.ref + "/" + (0, helper_1.getDateTime)().format('X') + '.' + (0, helper_1.getSlug)(32) + '.' + extension,
|
|
@@ -419,7 +421,7 @@ class FileUtil {
|
|
|
419
421
|
}
|
|
420
422
|
let results = yield this.upload(files);
|
|
421
423
|
results = yield this.formatFile(folder['id'], user_id, reqs, results, { input, is_hidden, tags, group });
|
|
422
|
-
return yield this.insertFileUnique(results, { thumb, width, height });
|
|
424
|
+
return yield this.insertFileUnique(results, { format, thumb, width, height });
|
|
423
425
|
}
|
|
424
426
|
return Promise.reject(errors_1.generalError.BAD_REQUEST);
|
|
425
427
|
});
|
|
@@ -470,8 +472,13 @@ class FileUtil {
|
|
|
470
472
|
let folder = yield this.createFolder(slug, { parent_id, root, name });
|
|
471
473
|
let results = [], reqs = [];
|
|
472
474
|
files.forEach((item) => {
|
|
473
|
-
|
|
474
|
-
|
|
475
|
+
let addition = {}, path = item;
|
|
476
|
+
if (typeof item == "object") {
|
|
477
|
+
addition = item;
|
|
478
|
+
path = item['path'];
|
|
479
|
+
}
|
|
480
|
+
results.push({ Location: path, Key: path });
|
|
481
|
+
reqs.push(Object.assign({ originalname: (0, helper_1.getSlug)(32), mimetype: null, size: 0, type }, addition));
|
|
475
482
|
});
|
|
476
483
|
results = yield this.formatFile(folder['id'], user_id, reqs, results, { input, tags, group });
|
|
477
484
|
return yield this.insertFileUnique(results);
|
|
@@ -557,7 +564,7 @@ class FileUtil {
|
|
|
557
564
|
return type;
|
|
558
565
|
});
|
|
559
566
|
}
|
|
560
|
-
formatFile(folder_id, user_id, reqs, files, { use_id = true, field = [], formatDateTime = "X", input = {}, is_hidden = undefined, tags = undefined, group = undefined } = {}) {
|
|
567
|
+
formatFile(folder_id, user_id, reqs, files, { format = false, use_id = true, field = [], formatDateTime = "X", input = {}, is_hidden = undefined, tags = undefined, group = undefined } = {}) {
|
|
561
568
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
562
569
|
try {
|
|
563
570
|
let result = yield Promise.all(files.map((file, key) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
@@ -574,30 +581,30 @@ class FileUtil {
|
|
|
574
581
|
path = (index < 0) ? protocol + path : path;
|
|
575
582
|
}
|
|
576
583
|
let extension = mime.extension(reqs[key].mimetype);
|
|
577
|
-
|
|
584
|
+
extension = extension ? extension : String(reqs[key].mimetype).split('/')[1];
|
|
585
|
+
let item = Object.assign(Object.assign({}, input), { folder_id,
|
|
578
586
|
user_id,
|
|
579
587
|
organ_id,
|
|
580
|
-
organ_by,
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
group });
|
|
588
|
+
organ_by, sort: reqs[key].sort || sort, date_added, name: reqs[key].originalname || (0, helper_1.getSlug)(32), filename: reqs[key].Key || file.Key || input['filename'], path, mimetype: reqs[key].mimetype, filesize: reqs[key].size, extension: (extension ? "." + extension : ''), type: reqs[key].type || file.type || input['type'], is_hidden, tags: reqs[key].tags || tags, custom: reqs[key].custom || input['custom'], group });
|
|
589
|
+
if (format) {
|
|
590
|
+
item = yield this.afterQueryFile(item);
|
|
591
|
+
}
|
|
585
592
|
if (use_id) {
|
|
586
|
-
|
|
593
|
+
item['id'] = id;
|
|
587
594
|
}
|
|
588
595
|
if (reqs[key].mimetype && reqs[key].mimetype.split('/')[0] == "image") {
|
|
589
596
|
try {
|
|
590
597
|
let body = reqs[key].Body || reqs[key].buffer;
|
|
591
598
|
let image = yield jimp.read(body);
|
|
592
|
-
|
|
593
|
-
|
|
599
|
+
item['height'] = image.bitmap.height;
|
|
600
|
+
item['width'] = image.bitmap.width;
|
|
594
601
|
}
|
|
595
602
|
catch (err) { }
|
|
596
603
|
}
|
|
597
604
|
if (field.length) {
|
|
598
|
-
|
|
605
|
+
item = _.pick(item, field);
|
|
599
606
|
}
|
|
600
|
-
return
|
|
607
|
+
return item;
|
|
601
608
|
})));
|
|
602
609
|
return result;
|
|
603
610
|
}
|
|
@@ -606,7 +613,7 @@ class FileUtil {
|
|
|
606
613
|
}
|
|
607
614
|
});
|
|
608
615
|
}
|
|
609
|
-
insertFileUnique(results, { thumb = false, width = 0, height = 0 } = {}) {
|
|
616
|
+
insertFileUnique(results, { format = false, thumb = false, width = 0, height = 0 } = {}) {
|
|
610
617
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
611
618
|
try {
|
|
612
619
|
let data = yield file_1.FileModel.schema(this.ref, "_").bulkCreate(results);
|
|
@@ -614,15 +621,14 @@ class FileUtil {
|
|
|
614
621
|
return Promise.reject(errors_1.generalError.BAD_REQUEST);
|
|
615
622
|
}
|
|
616
623
|
let result = data.map(item => item.toJSON());
|
|
617
|
-
if (thumb) {
|
|
618
|
-
// create thumb
|
|
624
|
+
if (format || thumb) {
|
|
625
|
+
// format or create thumb
|
|
619
626
|
result = yield Promise.all(result.map((item) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
return Object.assign(Object.assign({}, item), { thumb });
|
|
627
|
+
let include = (yield this.afterQueryFile(item)) || {};
|
|
628
|
+
if (thumb && item['type'] == 'i') {
|
|
629
|
+
include['thumb'] = yield this.findImageThumb(item, { width, height });
|
|
624
630
|
}
|
|
625
|
-
return item;
|
|
631
|
+
return Object.assign(Object.assign({}, item), include);
|
|
626
632
|
})));
|
|
627
633
|
}
|
|
628
634
|
return result;
|
|
@@ -630,16 +636,16 @@ class FileUtil {
|
|
|
630
636
|
catch (err) {
|
|
631
637
|
if (err.errors && err.errors[0].validatorKey == "not_unique") {
|
|
632
638
|
results = results.map(item => (Object.assign(Object.assign({}, item), { id: (0, uuid_1.v4)().replace(/-/gi, '').substring(0, 15) })));
|
|
633
|
-
return yield this.insertFileUnique(results, { thumb, width, height });
|
|
639
|
+
return yield this.insertFileUnique(results, { format, thumb, width, height });
|
|
634
640
|
}
|
|
635
641
|
return Promise.reject(errors_1.generalError.BAD_REQUEST);
|
|
636
642
|
}
|
|
637
643
|
});
|
|
638
644
|
}
|
|
639
|
-
uploadRawFormat(files, { field = ['name', 'filename', 'path', 'mimetype', 'filesize', 'extension', 'type', 'height', 'width'] } = {}) {
|
|
645
|
+
uploadRawFormat(files, { format = false, field = ['name', 'filename', 'path', 'mimetype', 'filesize', 'extension', 'type', 'height', 'width'] } = {}) {
|
|
640
646
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
641
647
|
let query = yield this.uploadRaw(files);
|
|
642
|
-
return yield this.formatFile(0, 0, files, query, { field });
|
|
648
|
+
return yield this.formatFile(0, 0, files, query, { format, field });
|
|
643
649
|
});
|
|
644
650
|
}
|
|
645
651
|
updateFile(id, input = {}, { paths = [] } = {}) {
|
package/utils/helper.d.ts
CHANGED
|
@@ -12,6 +12,10 @@ export declare const getDaysBetweenDates: (startDate: any, endDate: any, { utc }
|
|
|
12
12
|
}) => any[];
|
|
13
13
|
export declare const Joi_date: any;
|
|
14
14
|
export declare const getENV: (str: string, def?: any) => any;
|
|
15
|
+
export declare const getENVIndex: (index: string, { prefix, force }?: {
|
|
16
|
+
prefix?: string;
|
|
17
|
+
force?: boolean;
|
|
18
|
+
}) => string;
|
|
15
19
|
export declare const getSlug: (length?: number) => string;
|
|
16
20
|
export declare const getDateMysql: (date?: any) => any;
|
|
17
21
|
export declare const getTimestampMysql: (date?: any) => number;
|
|
@@ -50,6 +54,9 @@ export declare const removeHyphen: (str: string, replace?: string, { encode, rep
|
|
|
50
54
|
export declare const getMobileNumber: (str: string, { prefix }?: {
|
|
51
55
|
prefix?: string;
|
|
52
56
|
}) => string;
|
|
57
|
+
export declare const formatMobileNumber: (str: string, { prefix }?: {
|
|
58
|
+
prefix?: string;
|
|
59
|
+
}) => string;
|
|
53
60
|
export declare const removeSpace: (str: string, replace?: string) => string;
|
|
54
61
|
export declare const removeAt: (str: string, replace?: string) => string;
|
|
55
62
|
export declare const isNumber: (val: any, { negative }?: {
|
|
@@ -64,7 +71,7 @@ export declare const randomRef: ({ length_digital, length_alphabet }?: {
|
|
|
64
71
|
length_alphabet?: number;
|
|
65
72
|
}) => string;
|
|
66
73
|
export declare const treeToArray: (items: Array<any>, array?: Array<any>, level?: number) => Promise<any[]>;
|
|
67
|
-
export declare const buildTree: (nodes: Array<any>, { index, field_children, json_convert, key_index, key_parent, root, to_array }?: {
|
|
74
|
+
export declare const buildTree: (nodes: Array<any>, { index, field_children, json_convert, key_index, key_parent, root, to_array, notfound_parent }?: {
|
|
68
75
|
index?: any;
|
|
69
76
|
field_children?: string;
|
|
70
77
|
json_convert?: boolean;
|
|
@@ -72,6 +79,7 @@ export declare const buildTree: (nodes: Array<any>, { index, field_children, jso
|
|
|
72
79
|
key_parent?: string;
|
|
73
80
|
root?: any;
|
|
74
81
|
to_array?: boolean;
|
|
82
|
+
notfound_parent?: boolean;
|
|
75
83
|
}) => Promise<any[]>;
|
|
76
84
|
export declare const expandTree: (items: Array<any>, { array, parent, level, prefix, field_index, field_children, key_value }?: {
|
|
77
85
|
array?: any[];
|
|
@@ -88,6 +96,7 @@ export declare const slugify: (string?: any, { lowercase }?: {
|
|
|
88
96
|
}) => any;
|
|
89
97
|
export declare const slugifyField: (string?: any) => any;
|
|
90
98
|
export declare const stripHtml: (string: string) => string;
|
|
99
|
+
export declare const stripEmoji: (string: string) => string;
|
|
91
100
|
export declare const replaceColon: (string: string, { decode }?: {
|
|
92
101
|
decode?: boolean;
|
|
93
102
|
}) => string;
|
package/utils/helper.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.convertCurrency = exports.xorMerge = exports.xorDecode = exports.xorEncode = exports.getInstanceNumber = exports.getDomain = exports.getParent = exports.replaceColon = exports.stripHtml = exports.slugifyField = exports.slugify = exports.convertToBigEndian = exports.expandTree = exports.buildTree = exports.treeToArray = exports.randomRef = exports.multiExecArray = exports.isBase64 = exports.isNumber = exports.removeAt = exports.removeSpace = exports.getMobileNumber = exports.removeHyphen = exports.signToken = exports.getTokenDataFromTokenBySecret = exports.getUUID32 = exports.getUUID = exports.sleep = exports.getValueByLang = exports.getValueFunctionLang = exports.getValueFunctionFile = exports.getDateTime = exports.getTimestampMysql = exports.getDateMysql = exports.getSlug = exports.getENV = exports.Joi_date = exports.getDaysBetweenDates = exports.getDateFromString = exports.getDateRangeFormat = void 0;
|
|
3
|
+
exports.convertCurrency = exports.xorMerge = exports.xorDecode = exports.xorEncode = exports.getInstanceNumber = exports.getDomain = exports.getParent = exports.replaceColon = exports.stripEmoji = exports.stripHtml = exports.slugifyField = exports.slugify = exports.convertToBigEndian = exports.expandTree = exports.buildTree = exports.treeToArray = exports.randomRef = exports.multiExecArray = exports.isBase64 = exports.isNumber = exports.removeAt = exports.removeSpace = exports.formatMobileNumber = exports.getMobileNumber = exports.removeHyphen = exports.signToken = exports.getTokenDataFromTokenBySecret = exports.getUUID32 = exports.getUUID = exports.sleep = exports.getValueByLang = exports.getValueFunctionLang = exports.getValueFunctionFile = exports.getDateTime = exports.getTimestampMysql = exports.getDateMysql = exports.getSlug = exports.getENVIndex = exports.getENV = exports.Joi_date = exports.getDaysBetweenDates = exports.getDateFromString = exports.getDateRangeFormat = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const crypto = require("crypto");
|
|
6
6
|
const dotenv = require("dotenv");
|
|
@@ -57,6 +57,13 @@ const getENV = (str, def) => {
|
|
|
57
57
|
return process.env[str] || def;
|
|
58
58
|
};
|
|
59
59
|
exports.getENV = getENV;
|
|
60
|
+
const getENVIndex = (index, { prefix = "dev", force = false } = {}) => {
|
|
61
|
+
if (process.env.NODE_ENV == "production" || force) {
|
|
62
|
+
return index;
|
|
63
|
+
}
|
|
64
|
+
return prefix + "_" + index;
|
|
65
|
+
};
|
|
66
|
+
exports.getENVIndex = getENVIndex;
|
|
60
67
|
const getSlug = (length = 8) => {
|
|
61
68
|
return new short_unique_id_1.default().randomUUID(length);
|
|
62
69
|
};
|
|
@@ -154,14 +161,25 @@ exports.removeHyphen = removeHyphen;
|
|
|
154
161
|
const getMobileNumber = (str, { prefix = "+66" } = {}) => {
|
|
155
162
|
if (str) {
|
|
156
163
|
str = str.replace(/_/g, "").replace(/-/g, "").replace(/ /g, "");
|
|
157
|
-
if (str.indexOf("+") == -1 && str.length == 10) {
|
|
158
|
-
str
|
|
164
|
+
if (str.indexOf("+") == -1 && (str.length == 10 || str.length == 9)) {
|
|
165
|
+
if (str.length == 10 && str[0] == "0")
|
|
166
|
+
str = str.substr(1);
|
|
159
167
|
str = prefix + str;
|
|
160
168
|
}
|
|
161
169
|
}
|
|
162
170
|
return str;
|
|
163
171
|
};
|
|
164
172
|
exports.getMobileNumber = getMobileNumber;
|
|
173
|
+
const formatMobileNumber = (str, { prefix = "+66" } = {}) => {
|
|
174
|
+
if (str) {
|
|
175
|
+
str = str.replace(/_/g, "").replace(/-/g, "").replace(/ /g, "").replace(prefix, "");
|
|
176
|
+
if (str.length == 9) {
|
|
177
|
+
str = "0" + str;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return str;
|
|
181
|
+
};
|
|
182
|
+
exports.formatMobileNumber = formatMobileNumber;
|
|
165
183
|
const removeSpace = (str, replace = "") => {
|
|
166
184
|
return str ? str.replace(/ /g, replace) : "";
|
|
167
185
|
};
|
|
@@ -228,7 +246,7 @@ const treeToArray = (items, array = [], level = 1) => tslib_1.__awaiter(void 0,
|
|
|
228
246
|
return array;
|
|
229
247
|
});
|
|
230
248
|
exports.treeToArray = treeToArray;
|
|
231
|
-
const buildTree = (nodes, { index = undefined, field_children = "children", json_convert = false, key_index = "id", key_parent = "parent", root = undefined, to_array = false } = {}) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
249
|
+
const buildTree = (nodes, { index = undefined, field_children = "children", json_convert = false, key_index = "id", key_parent = "parent", root = undefined, to_array = false, notfound_parent = false } = {}) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
232
250
|
if (!nodes) {
|
|
233
251
|
return null;
|
|
234
252
|
}
|
|
@@ -266,11 +284,16 @@ const buildTree = (nodes, { index = undefined, field_children = "children", json
|
|
|
266
284
|
}
|
|
267
285
|
}
|
|
268
286
|
parent[field_children] = results;
|
|
287
|
+
delete children[parent[key_index]];
|
|
269
288
|
}
|
|
270
289
|
};
|
|
271
290
|
for (let i = 0, len = roots.length; i < len; ++i) {
|
|
272
291
|
findChildren(roots[i]);
|
|
273
292
|
}
|
|
293
|
+
if (notfound_parent) {
|
|
294
|
+
let items = Object.keys(children).reduce((total, key) => total.concat(children[key]), []);
|
|
295
|
+
roots.unshift({ [key_index]: -1, [field_children]: items });
|
|
296
|
+
}
|
|
274
297
|
if (index)
|
|
275
298
|
roots = roots[0];
|
|
276
299
|
if (roots && to_array) {
|
|
@@ -350,6 +373,10 @@ const stripHtml = (string) => {
|
|
|
350
373
|
.replace(/\n/g, '');
|
|
351
374
|
};
|
|
352
375
|
exports.stripHtml = stripHtml;
|
|
376
|
+
const stripEmoji = (string) => {
|
|
377
|
+
return String(string).replace(/(?![*#0-9]+)[\p{Emoji}\p{Emoji_Modifier}\p{Emoji_Component}\p{Emoji_Modifier_Base}\p{Emoji_Presentation}]/gu, '').trim();
|
|
378
|
+
};
|
|
379
|
+
exports.stripEmoji = stripEmoji;
|
|
353
380
|
const replaceColon = (string, { decode = false } = {}) => {
|
|
354
381
|
if (!string || typeof (string) != 'string') {
|
|
355
382
|
return string;
|
package/utils/metadata.js
CHANGED
|
@@ -27,11 +27,11 @@ class MetadataUtil {
|
|
|
27
27
|
let value = {}, type = types;
|
|
28
28
|
if (_.isObject(input[key])) {
|
|
29
29
|
let val = {};
|
|
30
|
-
_.each(input[key], (v, k) => { val['value_' + k] = (0, helper_1.stripHtml)(v
|
|
30
|
+
_.each(input[key], (v, k) => { val['value_' + k] = v ? (0, helper_1.stripEmoji)((0, helper_1.stripHtml)(v)).substring(0, str_length) : ""; });
|
|
31
31
|
value = val;
|
|
32
32
|
}
|
|
33
33
|
else {
|
|
34
|
-
value = { value_en: (0, helper_1.stripHtml)(String(input[key] || "").substring(0, str_length)) };
|
|
34
|
+
value = { value_en: (0, helper_1.stripEmoji)((0, helper_1.stripHtml)(String(input[key] || "")).substring(0, str_length)) };
|
|
35
35
|
}
|
|
36
36
|
if (autoType && !items[key]) {
|
|
37
37
|
let str = key.split(":");
|
package/utils/stream.d.ts
CHANGED
|
@@ -40,7 +40,7 @@ export declare class StreamUtil {
|
|
|
40
40
|
private fileUtil;
|
|
41
41
|
private languageUtil;
|
|
42
42
|
constructor(ref?: string, option?: QueryParamOption, fileUtil?: FileUtil);
|
|
43
|
-
findField(slug: string, namespace: string, { index, option, no_lang, field_slug, field_only, field_required, lang, lang_code, is_required, default_value, addition, include, include_only, convert_option, field_option, require, multiple_table, multiple_spread, text, bullets, multiple, relationship, file, image, field_exclude, section }?: {
|
|
43
|
+
findField(slug: string, namespace: string, { index, option, no_lang, field_slug, field_only, field_required, lang, lang_code, is_required, default_value, addition, include, include_only, convert_option, convert_value, field_option, require, multiple_table, multiple_spread, text, bullets, multiple, relationship, file, image, field_exclude, section }?: {
|
|
44
44
|
index?: string;
|
|
45
45
|
option?: {};
|
|
46
46
|
no_lang?: boolean;
|
|
@@ -55,6 +55,7 @@ export declare class StreamUtil {
|
|
|
55
55
|
include?: any;
|
|
56
56
|
include_only?: boolean;
|
|
57
57
|
convert_option?: boolean;
|
|
58
|
+
convert_value?: boolean;
|
|
58
59
|
field_option?: {};
|
|
59
60
|
require?: boolean;
|
|
60
61
|
multiple_table?: boolean;
|
|
@@ -117,7 +118,7 @@ export declare class StreamUtil {
|
|
|
117
118
|
result: {};
|
|
118
119
|
labels: any[];
|
|
119
120
|
}>;
|
|
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 }?: {
|
|
121
|
+
genField(streams: Array<any>, { index, option, slug, id_stream, prefix, multiple_table, multiple_spread, addition, convert_option, convert_value, field_option, default_value, default_lang, lang_code, no_lang, lang, country, section }?: {
|
|
121
122
|
index?: string;
|
|
122
123
|
option?: {};
|
|
123
124
|
slug?: string;
|
|
@@ -127,6 +128,7 @@ export declare class StreamUtil {
|
|
|
127
128
|
multiple_spread?: boolean;
|
|
128
129
|
addition?: {};
|
|
129
130
|
convert_option?: boolean;
|
|
131
|
+
convert_value?: boolean;
|
|
130
132
|
field_option?: {};
|
|
131
133
|
default_value?: any;
|
|
132
134
|
default_lang?: string;
|
|
@@ -168,6 +170,14 @@ export declare class StreamUtil {
|
|
|
168
170
|
tags?: TagFile;
|
|
169
171
|
group?: any;
|
|
170
172
|
}): Promise<{}>;
|
|
173
|
+
upsertBySlugField(fields: Array<any>, index: string, { ref, req, parent_slug, input, tags, group }?: {
|
|
174
|
+
ref?: string;
|
|
175
|
+
req?: Request<import("express-serve-static-core").ParamsDictionary, any, any, import("qs").ParsedQs, Record<string, any>>;
|
|
176
|
+
parent_slug?: string;
|
|
177
|
+
input?: {};
|
|
178
|
+
tags?: TagFile;
|
|
179
|
+
group?: any;
|
|
180
|
+
}): Promise<{}>;
|
|
171
181
|
findStream(slug: string, namespace: string, { result, lang_code, field_exclude, multiple, relationship, file, image, is_lang, stream, use_param }?: {
|
|
172
182
|
result?: any[];
|
|
173
183
|
lang_code?: string;
|
package/utils/stream.js
CHANGED
|
@@ -101,7 +101,7 @@ class StreamUtil {
|
|
|
101
101
|
this.fileUtil = fileUtil || new file_2.FileUtil(this.ref, this.option);
|
|
102
102
|
this.languageUtil = new language_1.LanguageUtil(this.ref, this.option);
|
|
103
103
|
}
|
|
104
|
-
findField(slug, namespace, { index = "", option = {}, no_lang = false, field_slug = [], field_only = true, field_required = true, lang = [], lang_code = "en", is_required = "", default_value = {}, addition = {}, include = undefined, include_only = false, convert_option = false, field_option = {}, require = false, multiple_table = false, multiple_spread = false, text = false, bullets = false, multiple = false, relationship = false, file = false, image = false, field_exclude = [], section = false } = {}) {
|
|
104
|
+
findField(slug, namespace, { index = "", option = {}, no_lang = false, field_slug = [], field_only = true, field_required = true, lang = [], lang_code = "en", is_required = "", default_value = {}, addition = {}, include = undefined, include_only = false, convert_option = false, convert_value = false, field_option = {}, require = false, multiple_table = false, multiple_spread = false, text = false, bullets = false, multiple = false, relationship = false, file = false, image = false, field_exclude = [], section = false } = {}) {
|
|
105
105
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
106
106
|
let data;
|
|
107
107
|
let where = {};
|
|
@@ -184,7 +184,7 @@ class StreamUtil {
|
|
|
184
184
|
}
|
|
185
185
|
}
|
|
186
186
|
if (convert_option) {
|
|
187
|
-
data['fields'] = yield this.genField(data['fields'], { index, option, slug, id_stream: data['id'], prefix: data['stream_prefix'], multiple_table, multiple_spread, addition, field_option, default_value, lang_code, no_lang, lang, section });
|
|
187
|
+
data['fields'] = yield this.genField(data['fields'], { index, option, slug, id_stream: data['id'], prefix: data['stream_prefix'], multiple_table, multiple_spread, addition, convert_value, field_option, default_value, lang_code, no_lang, lang, section });
|
|
188
188
|
}
|
|
189
189
|
if (field_only) {
|
|
190
190
|
return data['fields'];
|
|
@@ -347,7 +347,7 @@ class StreamUtil {
|
|
|
347
347
|
return { result, labels };
|
|
348
348
|
});
|
|
349
349
|
}
|
|
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 } = {}) {
|
|
350
|
+
genField(streams, { index = "", option = {}, slug = "", id_stream = "", prefix = "", multiple_table = false, multiple_spread = false, addition = {}, convert_option = true, convert_value = false, field_option = {}, default_value = {}, default_lang = "en", lang_code = "en", no_lang = false, lang = [], country = undefined, section = false } = {}) {
|
|
351
351
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
352
352
|
let fields = [], sections = [];
|
|
353
353
|
let exclude = option['excludeObj'] || {};
|
|
@@ -472,7 +472,9 @@ class StreamUtil {
|
|
|
472
472
|
continue;
|
|
473
473
|
}
|
|
474
474
|
if (convert_option) {
|
|
475
|
+
let obj_value = {};
|
|
475
476
|
if (item['field_type'] == "choice") {
|
|
477
|
+
let opt_empty = false;
|
|
476
478
|
if (field_data['choice_data']) {
|
|
477
479
|
let data = [];
|
|
478
480
|
data = field_data['choice_data'].split('\n');
|
|
@@ -495,12 +497,16 @@ class StreamUtil {
|
|
|
495
497
|
data[k] = { key, value };
|
|
496
498
|
}
|
|
497
499
|
else {
|
|
500
|
+
opt_empty = true;
|
|
498
501
|
data[k] = { key: '', value };
|
|
499
502
|
}
|
|
500
503
|
}
|
|
501
504
|
else {
|
|
502
505
|
data[k] = { key: v, value: v };
|
|
503
506
|
}
|
|
507
|
+
if (convert_value && data[k]) {
|
|
508
|
+
obj_value[data[k]['key']] = data[k]['value'];
|
|
509
|
+
}
|
|
504
510
|
});
|
|
505
511
|
item['data'] = data;
|
|
506
512
|
}
|
|
@@ -510,9 +516,23 @@ class StreamUtil {
|
|
|
510
516
|
if (value && value.indexOf('lang:') > -1) {
|
|
511
517
|
item['value'] = (0, i18n_1.__)({ phrase: value, locale: lang_code });
|
|
512
518
|
}
|
|
519
|
+
if (!item['key'])
|
|
520
|
+
opt_empty = true;
|
|
521
|
+
if (convert_value && item['key']) {
|
|
522
|
+
obj_value[item['key']] = item['value'];
|
|
523
|
+
}
|
|
513
524
|
return item;
|
|
514
525
|
});
|
|
515
526
|
}
|
|
527
|
+
if (field_data['default_value'] && !opt_empty && (item['field_value'] == '' || item['field_value'] == null)) {
|
|
528
|
+
item['field_value'] = field_data['default_value'];
|
|
529
|
+
}
|
|
530
|
+
if (convert_value && typeof item['field_value'] != "undefined") {
|
|
531
|
+
let field_value = item['field_value'];
|
|
532
|
+
if (item['field_value'] == null && opt_empty)
|
|
533
|
+
field_value = '';
|
|
534
|
+
field_data['value'] = obj_value[field_value];
|
|
535
|
+
}
|
|
516
536
|
}
|
|
517
537
|
else if (!field_option[item['field_slug']] && (item['field_type'] == "relationship" || item['field_type'] == "multiple") && field_data['choose_stream']) {
|
|
518
538
|
try {
|
|
@@ -557,6 +577,9 @@ class StreamUtil {
|
|
|
557
577
|
item['title'] = item['title'] ? item['title'] : item[stream['title_column']];
|
|
558
578
|
(0, helper_2.getValueFunctionLang)('title')(item, { result: item, lang_code });
|
|
559
579
|
let value = item['title'] ? item['title'] : item['id'];
|
|
580
|
+
if (convert_value && item['id']) {
|
|
581
|
+
obj_value[item['id']] = value;
|
|
582
|
+
}
|
|
560
583
|
return {
|
|
561
584
|
key: item['id'],
|
|
562
585
|
value
|
|
@@ -567,6 +590,9 @@ class StreamUtil {
|
|
|
567
590
|
}
|
|
568
591
|
}
|
|
569
592
|
item['data'] = data;
|
|
593
|
+
if (convert_value && item['field_value']) {
|
|
594
|
+
field_data['value'] = obj_value[item['field_value']];
|
|
595
|
+
}
|
|
570
596
|
}
|
|
571
597
|
catch (err) { }
|
|
572
598
|
}
|
|
@@ -757,7 +783,7 @@ class StreamUtil {
|
|
|
757
783
|
if (id_stream && (streams && streams.length)) {
|
|
758
784
|
let file_id = [];
|
|
759
785
|
yield Promise.all(streams.map(({ field_type, field_slug, field_data }) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
760
|
-
if (field_type == "multiple" && field_data && field_data['choose_stream']) {
|
|
786
|
+
if (field_type == "multiple" && field_data && field_data['choose_stream'] && field_data['self_table'] != "yes") {
|
|
761
787
|
let stream = yield stream_1.StreamModel.schema(this.ref, "_").findOne({ where: { id: field_data['choose_stream'] }, raw: true, attributes: ['stream_slug', 'stream_prefix'] });
|
|
762
788
|
let table_f = stream['stream_prefix'] ? stream['stream_prefix'] + stream['stream_slug'] : stream['stream_slug'];
|
|
763
789
|
yield (0, db_1.remove)(this.ref, `${table}_${table_f}`, { where: { row_id: id } });
|
|
@@ -912,7 +938,14 @@ class StreamUtil {
|
|
|
912
938
|
}
|
|
913
939
|
upsertBySlug(slug, namespace, index, { ref = "", req = {}, parent_slug = "", input = {}, tags = [], group = undefined } = {}) {
|
|
914
940
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
915
|
-
let fields = yield this.getBuilder(slug, namespace, { index: "fields" })
|
|
941
|
+
let fields = yield this.getBuilder(slug, namespace, { index: "fields" });
|
|
942
|
+
return yield this.upsertBySlugField(fields, index, { ref, req, parent_slug, input, tags, group });
|
|
943
|
+
});
|
|
944
|
+
}
|
|
945
|
+
upsertBySlugField(fields, index, { ref = "", req = {}, parent_slug = "", input = {}, tags = [], group = undefined } = {}) {
|
|
946
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
947
|
+
fields = fields || [];
|
|
948
|
+
let where_folder = {};
|
|
916
949
|
ref = ref || this.ref;
|
|
917
950
|
let files = (req.file ? [req.file] : (req.files || [])).reduce((total, item) => Object.assign(total, { [item['fieldname']]: item }), {});
|
|
918
951
|
let id_files = {}, fileUtil = new file_2.FileUtil(ref, this.option);
|
|
@@ -1636,8 +1669,10 @@ class StreamUtil {
|
|
|
1636
1669
|
}
|
|
1637
1670
|
}
|
|
1638
1671
|
}
|
|
1639
|
-
|
|
1640
|
-
|
|
1672
|
+
if (typeof field['sort_order'] == "undefined") {
|
|
1673
|
+
let sort_order = yield field_1.FieldModel.schema(this.ref, "_").max('sort_order', { where: { stream_id: stream['id'] } });
|
|
1674
|
+
field['sort_order'] = sort_order ? Number(sort_order + 1) : 1;
|
|
1675
|
+
}
|
|
1641
1676
|
if (!field['stream_id']) {
|
|
1642
1677
|
field['stream_id'] = stream['id'];
|
|
1643
1678
|
}
|
|
@@ -1897,11 +1932,13 @@ class StreamUtil {
|
|
|
1897
1932
|
allow_type = new RegExp(/^(image.*)$/).test(file[field_slug]['mimetype']);
|
|
1898
1933
|
if (!allow_type) {
|
|
1899
1934
|
input[field_slug] = mime.extension(file[field_slug]['mimetype']);
|
|
1935
|
+
input[field_slug] = input[field_slug] ? input[field_slug] : String(file[field_slug]['mimetype']).split('/')[1];
|
|
1900
1936
|
field = Joi.string().valid('image/*');
|
|
1901
1937
|
}
|
|
1902
1938
|
}
|
|
1903
1939
|
if (!allow_type && field_data['allowed_types']) {
|
|
1904
1940
|
let extension = String(mime.extension(file[field_slug]['mimetype']));
|
|
1941
|
+
extension = extension ? extension : String(file[field_slug]['mimetype']).split('/')[1];
|
|
1905
1942
|
if (!new RegExp(`^(${field_data['allowed_types']})$`).test(extension)) {
|
|
1906
1943
|
input[field_slug] = extension;
|
|
1907
1944
|
field = Joi.string().valid(...(field_data['allowed_types'].split('|') || []));
|
package/utils/user.d.ts
CHANGED
|
@@ -40,9 +40,9 @@ export declare const convertAddress: (data: any, { lang_code, transform }?: {
|
|
|
40
40
|
lang_code?: string;
|
|
41
41
|
transform?: boolean;
|
|
42
42
|
}) => Promise<any>;
|
|
43
|
-
export declare const getAddressIndex: (data: any, { condition,
|
|
43
|
+
export declare const getAddressIndex: (data: any, { condition, where }?: {
|
|
44
44
|
condition?: {};
|
|
45
|
-
|
|
45
|
+
where?: {};
|
|
46
46
|
}) => Promise<{}>;
|
|
47
47
|
export declare const getCountry: (ref: string, { organ_id, lang_code, setting }?: {
|
|
48
48
|
organ_id?: string;
|
package/utils/user.js
CHANGED
|
@@ -229,12 +229,11 @@ const convertAddress = (data, { lang_code = "en", transform = false } = {}) => t
|
|
|
229
229
|
return data;
|
|
230
230
|
});
|
|
231
231
|
exports.convertAddress = convertAddress;
|
|
232
|
-
const getAddressIndex = (data, { condition = {},
|
|
233
|
-
let result = {},
|
|
234
|
-
let order = [sequelize.literal(`FIELD(lang_code,${'\'' + where['lang_code'].join('\',\'') + '\''})`)];
|
|
232
|
+
const getAddressIndex = (data, { condition = {}, where = {} } = {}) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
233
|
+
let result = {}, bol = false;
|
|
235
234
|
if (!bol && data['country'] && !condition['country_id']) {
|
|
236
235
|
let country = yield country_1.CountryModel.schema("core", "_").findOne({
|
|
237
|
-
raw: true, where: Object.assign(Object.assign({}, where), { country_name: data['country'] }), attributes: ['id']
|
|
236
|
+
raw: true, where: Object.assign(Object.assign({}, where), { country_name: data['country'] }), attributes: ['id']
|
|
238
237
|
});
|
|
239
238
|
if (country) {
|
|
240
239
|
result['country_id'] = country['id'];
|
|
@@ -245,7 +244,7 @@ const getAddressIndex = (data, { condition = {}, lang_code = "en" } = {}) => tsl
|
|
|
245
244
|
if (!bol && data['state'] && !condition['state_id']) {
|
|
246
245
|
let country_id = condition['country_id'] || null;
|
|
247
246
|
let state = yield state_1.StateModel.schema("core", "_").findOne({
|
|
248
|
-
raw: true, where: Object.assign(Object.assign({}, where), { country_id, state_name: data['state'] }), attributes: ['id']
|
|
247
|
+
raw: true, where: Object.assign(Object.assign({}, where), { country_id, state_name: data['state'] }), attributes: ['id']
|
|
249
248
|
});
|
|
250
249
|
if (state) {
|
|
251
250
|
result['state_id'] = state['id'];
|
|
@@ -256,7 +255,7 @@ const getAddressIndex = (data, { condition = {}, lang_code = "en" } = {}) => tsl
|
|
|
256
255
|
if (!bol && data['city'] && !condition['city_id']) {
|
|
257
256
|
let state_id = condition['state_id'] || null;
|
|
258
257
|
let city = yield city_1.CityModel.schema("core", "_").findOne({
|
|
259
|
-
raw: true, where: Object.assign(Object.assign({}, where), { state_id, city_name: data['city'] }), attributes: ['id']
|
|
258
|
+
raw: true, where: Object.assign(Object.assign({}, where), { state_id, city_name: data['city'] }), attributes: ['id']
|
|
260
259
|
});
|
|
261
260
|
if (city) {
|
|
262
261
|
result['city_id'] = city['id'];
|
|
@@ -267,7 +266,7 @@ const getAddressIndex = (data, { condition = {}, lang_code = "en" } = {}) => tsl
|
|
|
267
266
|
if (!bol && data['district']) {
|
|
268
267
|
let city_id = condition['city_id'] || null;
|
|
269
268
|
let district = yield district_1.DistrictModel.schema("core", "_").findOne({
|
|
270
|
-
raw: true, where: Object.assign(Object.assign({}, where), { city_id, district_name: data['district'] }), attributes: ['id']
|
|
269
|
+
raw: true, where: Object.assign(Object.assign({}, where), { city_id, district_name: data['district'] }), attributes: ['id']
|
|
271
270
|
});
|
|
272
271
|
if (district)
|
|
273
272
|
result['district_id'] = district['id'];
|
|
@@ -277,7 +276,14 @@ const getAddressIndex = (data, { condition = {}, lang_code = "en" } = {}) => tsl
|
|
|
277
276
|
exports.getAddressIndex = getAddressIndex;
|
|
278
277
|
const getCountry = (ref, { organ_id = "", lang_code = "en", setting = {} } = {}) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
279
278
|
let where = { status: 1, lang_code }, default_country;
|
|
280
|
-
if (
|
|
279
|
+
if (organ_id) {
|
|
280
|
+
let query = yield organ_1.UserOrganModel.schema(ref, "_").findOne({ where: { id: organ_id }, attributes: ['setting'], raw: true });
|
|
281
|
+
setting = query ? (query['setting'] || {}) : {};
|
|
282
|
+
}
|
|
283
|
+
if (setting['mobile_code']) {
|
|
284
|
+
where['mobilecode'] = setting['mobile_code'].split(",");
|
|
285
|
+
}
|
|
286
|
+
else if (setting['country_id']) {
|
|
281
287
|
where['id'] = setting['country_id'].split(",");
|
|
282
288
|
}
|
|
283
289
|
let data = yield country_1.CountryModel.schema("core", "_").findAll({
|
|
@@ -311,9 +317,12 @@ const getGroupSetting = (ref, id, { attributes = ['id', 'shared', 'setting'] } =
|
|
|
311
317
|
exports.getGroupSetting = getGroupSetting;
|
|
312
318
|
const getGroupPermission = (ref, id, module, { permission = {}, group_shared = undefined, organ_id = 0, attributes = ['id', 'shared', 'setting'] } = {}) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
313
319
|
if (typeof group_shared == "undefined") {
|
|
314
|
-
let
|
|
315
|
-
if (
|
|
316
|
-
|
|
320
|
+
let group = yield (0, exports.getGroupSetting)(ref, id, { attributes });
|
|
321
|
+
if (group) {
|
|
322
|
+
permission['group_setting'] = group['setting'] || {};
|
|
323
|
+
permission['admin'] = group['shared'];
|
|
324
|
+
group_shared = group['shared'];
|
|
325
|
+
}
|
|
317
326
|
}
|
|
318
327
|
if (typeof group_shared != "undefined" && group_shared == 0) {
|
|
319
328
|
let query = yield group_permission_1.UserGroupPermissionModel.schema(ref, "_").findOne({
|
package/utils/validator.d.ts
CHANGED
|
@@ -57,5 +57,13 @@ export declare const convertService: ({ convert_type, schema }?: {
|
|
|
57
57
|
convert_type?: any[];
|
|
58
58
|
schema?: {};
|
|
59
59
|
}) => (req: any, res: any, next: any) => Promise<any>;
|
|
60
|
+
export declare const entryValidateService: ({ module, schema }?: {
|
|
61
|
+
module?: string[];
|
|
62
|
+
schema?: {};
|
|
63
|
+
}) => (req: any, res: any, next: any) => Promise<any>;
|
|
64
|
+
export declare const entryParamService: ({ module, schema }?: {
|
|
65
|
+
module?: string[];
|
|
66
|
+
schema?: {};
|
|
67
|
+
}) => (req: any, res: any, next: any) => Promise<any>;
|
|
60
68
|
export declare const createdByValidate: (req: any, res: any, next: any) => Promise<any>;
|
|
61
69
|
export {};
|
package/utils/validator.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createdByValidate = exports.convertService = exports.fieldService = exports.dataService = exports.printService = exports.exportService = exports.importService = exports.streamService = exports.multiService = exports.fileService = exports.paramService = exports.validateService = exports.validate = void 0;
|
|
3
|
+
exports.createdByValidate = exports.entryParamService = exports.entryValidateService = exports.convertService = exports.fieldService = exports.dataService = exports.printService = exports.exportService = exports.importService = exports.streamService = exports.multiService = exports.fileService = exports.paramService = exports.validateService = exports.validate = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const Joi = require("joi");
|
|
6
6
|
const errors_1 = require("../errors");
|
|
@@ -105,7 +105,7 @@ const fileService = (setup, { userfiles = false, required = false, fileSize = 0,
|
|
|
105
105
|
let option = setup(validate);
|
|
106
106
|
let upload = userfiles ? option.array("userfiles", maxCount) : option.any();
|
|
107
107
|
return upload(req, res, (err) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
108
|
-
return (0, exports.validateService)(Joi.object().keys({ tags: Joi.array().allow('', null).items(Joi.object().keys({ slug: Joi.string(), type: Joi.string() })) }).unknown())(req, res, () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
108
|
+
return (0, exports.validateService)(Joi.object().keys({ tags: Joi.array().allow('', null).items(Joi.object().keys({ slug: Joi.string(), type: Joi.string() })) }).unknown(), { field_omit: [] })(req, res, () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
109
109
|
try {
|
|
110
110
|
let field = userfiles ? "userfiles" : undefined;
|
|
111
111
|
if (err) {
|
|
@@ -180,7 +180,7 @@ const multiService = ({ field = undefined, record = undefined, record_addition =
|
|
|
180
180
|
schema['field'] = Joi.string().valid(...field);
|
|
181
181
|
schema['value'] = value_schema;
|
|
182
182
|
}
|
|
183
|
-
return (0, exports.validateService)(Joi.object().keys(Object.assign(Object.assign({}, schema), { records: Joi.array().items(Joi.object().keys(Object.assign({ id: Joi.number().required() }, record)).options({ stripUnknown: true })).min(1).required() })).options({ stripUnknown: true }));
|
|
183
|
+
return (0, exports.validateService)(Joi.object().keys(Object.assign(Object.assign({}, schema), { records: Joi.array().items(Joi.object().keys(Object.assign({ id: Joi.number().required() }, record)).options({ stripUnknown: true })).min(1).required() })).options({ stripUnknown: true }), { field_omit: [] });
|
|
184
184
|
};
|
|
185
185
|
exports.multiService = multiService;
|
|
186
186
|
const streamService = ({ slug = "", name_space = "", param = "index" } = {}) => (req, res, next) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -207,7 +207,7 @@ const streamService = ({ slug = "", name_space = "", param = "index" } = {}) =>
|
|
|
207
207
|
});
|
|
208
208
|
exports.streamService = streamService;
|
|
209
209
|
const importService = ({ import_type = [], schema = {} } = {}) => (req, res, next) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
210
|
-
return (0, exports.validateService)(Joi.object().keys(Object.assign({ import_type: Joi.string().valid(...import_type) }, schema)).unknown())(req, res, next);
|
|
210
|
+
return (0, exports.validateService)(Joi.object().keys(Object.assign({ import_type: Joi.string().valid(...import_type) }, schema)).unknown(), { field_omit: [] })(req, res, next);
|
|
211
211
|
});
|
|
212
212
|
exports.importService = importService;
|
|
213
213
|
const exportService = ({ file_type = undefined, export_type = [], limit = 200, schema = {} } = {}) => (req, res, next) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -240,8 +240,9 @@ const exportService = ({ file_type = undefined, export_type = [], limit = 200, s
|
|
|
240
240
|
});
|
|
241
241
|
exports.exportService = exportService;
|
|
242
242
|
const printService = ({ print_type = [], schema = {} } = {}) => (req, res, next) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
243
|
+
let config = res.locals.config || {};
|
|
243
244
|
if (req.query.ids) {
|
|
244
|
-
res.locals.option = Object.assign(Object.assign({}, (res.locals.option || {})), { ids: String(req.query.ids).split(',') });
|
|
245
|
+
res.locals.option = Object.assign(Object.assign({}, (res.locals.option || {})), { ids: String(req.query.ids).split(',').slice(0, (config['maxQueryIds'] || 25)) });
|
|
245
246
|
}
|
|
246
247
|
if (print_type && !req.query.print_type) {
|
|
247
248
|
req.query.print_type = print_type[0];
|
|
@@ -261,8 +262,9 @@ const printService = ({ print_type = [], schema = {} } = {}) => (req, res, next)
|
|
|
261
262
|
});
|
|
262
263
|
exports.printService = printService;
|
|
263
264
|
const dataService = ({ schema = {} } = {}) => (req, res, next) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
265
|
+
let config = res.locals.config || {};
|
|
264
266
|
if (req.query.ids) {
|
|
265
|
-
res.locals.option = Object.assign(Object.assign({}, (res.locals.option || {})), { ids: String(req.query.ids).split(',') });
|
|
267
|
+
res.locals.option = Object.assign(Object.assign({}, (res.locals.option || {})), { ids: String(req.query.ids).split(',').slice(0, (config['maxQueryIds'] || 25)) });
|
|
266
268
|
}
|
|
267
269
|
let option = Object.keys(schema || {});
|
|
268
270
|
if (option.length) {
|
|
@@ -288,9 +290,23 @@ const fieldService = ({ field = [], schema = {} } = {}) => (req, res, next) => t
|
|
|
288
290
|
});
|
|
289
291
|
exports.fieldService = fieldService;
|
|
290
292
|
const convertService = ({ convert_type = [], schema = {} } = {}) => (req, res, next) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
291
|
-
return (0, exports.validateService)(Joi.object().keys(Object.assign({ ids: Joi.array().items(Joi.number()).min(1), convert_type: Joi.string().valid(...convert_type) }, schema)).unknown())(req, res, next);
|
|
293
|
+
return (0, exports.validateService)(Joi.object().keys(Object.assign({ ids: Joi.array().items(Joi.number()).min(1), convert_type: Joi.string().valid(...convert_type) }, schema)).unknown(), { field_omit: [] })(req, res, next);
|
|
292
294
|
});
|
|
293
295
|
exports.convertService = convertService;
|
|
296
|
+
const entryValidateService = ({ module = ['contact'], schema = {} } = {}) => (req, res, next) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
297
|
+
return (0, exports.validateService)(Joi.object().keys(Object.assign({ module: Joi.string().valid(...module), entry_id: Joi.number().required() }, schema)).unknown(), { field_omit: [] })(req, res, next);
|
|
298
|
+
});
|
|
299
|
+
exports.entryValidateService = entryValidateService;
|
|
300
|
+
const entryParamService = ({ module = ['contact'], schema = {} } = {}) => (req, res, next) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
301
|
+
if (req.query.module) {
|
|
302
|
+
res.locals.option = Object.assign(Object.assign({}, (res.locals.option || {})), { module: req.query.module });
|
|
303
|
+
}
|
|
304
|
+
if (req.query.entry_id) {
|
|
305
|
+
res.locals.option = Object.assign(Object.assign({}, (res.locals.option || {})), { entry_id: req.query.entry_id });
|
|
306
|
+
}
|
|
307
|
+
return (0, exports.paramService)(Joi.object().keys(Object.assign({ module: Joi.string().valid(...module), entry_id: Joi.number().required() }, schema)).unknown())(req, res, next);
|
|
308
|
+
});
|
|
309
|
+
exports.entryParamService = entryParamService;
|
|
294
310
|
exports.createdByValidate = (0, exports.validateService)(Joi.object().keys({
|
|
295
311
|
created_by: Joi.alternatives().try(Joi.string(), Joi.number()).required()
|
|
296
312
|
}).unknown());
|