sails-hook-blacksails
Version:
A Sails Micro-app architecture framework
125 lines (119 loc) • 3.62 kB
JavaScript
import _ from 'lodash';
// import validator from 'validator';
module.exports = {
/**
* 傳入參數以檢查是否存在該筆資料
*
* @export
* @param {*} payload:[[Model, columnName, value]]
*/
async checkNullData(payload) {
sails.log.info('ValidatorHelper checkNullData payload=>\n', payload);
try {
if (!payload) {
throw Error(MESSAGE.BAD_REQUEST.NO_REQUIRED_PARAMETER('payload'));
}
if (!_.isArray(payload)) {
throw Error(MESSAGE.BAD_REQUEST.CHECK_INPUT_PARAMETER_TYPE('payload', Array));
}
let itemShouldExists;
for (const item of payload) {
if (item.length !== 3) {
// eslint-disable-next-line
continue;
}
// console.log('item[0]=>', item[0].name);
if (!item[0]) {
throw Error(MESSAGE.BAD_REQUEST.NO_REQUIRED_PARAMETER('1st parameter: model or model name'));
}
const modelName = item[0].name || item[0];
const model = sails.models[modelName.toLowerCase()];
// console.log('model=>', model);
if (!model) {
throw Error(MESSAGE.BAD_REQUEST.MODEL_NOT_EXISTS(model));
}
const key = item[1];
const value = item[2];
const where = {
[key]: value,
};
// eslint-disable-next-line
itemShouldExists = await model.findOne({
where,
attributes: ['id'],
});
if (!itemShouldExists) {
return `${model.name}.${key}=${value}`;
}
}
return false;
} catch (e) {
throw e;
}
},
/**
* 參數可直接傳入或以 [] 形式,表示其中一個不為 null 即可
* @export
* @param {*} payload
* @deprecated 改用 checkNull()
* @returns result or throw an Error
*/
noNull(payload) {
sails.log.info('ValidatorHelper noNull payload=>\n', payload);
try {
if (!payload) {
throw Error(MESSAGE.BAD_REQUEST.NO_REQUIRED_PARAMETER('payload'));
}
if (!_.isArray(payload)) {
throw Error(MESSAGE.BAD_REQUEST.CHECK_INPUT_PARAMETER_TYPE('payload', Array));
}
const nullParams = payload.some((p) => {
if (_.isArray(p)) {
// console.log('isArray=>', p);
return !p.some(e => !_.isNil(e));
}
return _.isNil(p);
});
sails.log.info('Parameters include null=>', nullParams);
// if (nullParams) {
// throw Error(MESSAGE.BAD_REQUEST.NO_REQUIRED_PARAMETER);
// }
return !nullParams;
} catch (e) {
throw e;
}
},
/**
* 參數需傳入{}形式,表示其中一個不為 null 即可
* @export
* @param {*} payload
* @returns result
*/
checkNull(payload) {
sails.log.info('ValidatorHelper checkNull payload=>\n', payload);
try {
if (!payload) {
throw Error(MESSAGE.BAD_REQUEST.NO_REQUIRED_PARAMETER('payload'));
}
// console.log('Object.keys(payload)=>', Object.keys(payload));
const nullItemIndex = Object
.keys(payload)
.findIndex((e) => {
// console.log('payload[e]=>', payload[e]);
const target = payload[e];
const isNull = _.isNil(target);
if (!isNull && _.isArray(target)) {
return !target.some(i => !_.isNil(i));
}
// console.log('lodash=>', isNull);
return isNull;
});
// console.log('!nullItemIndex=>', nullItemIndex);
return (nullItemIndex === -1)
? null
: Object.keys(payload)[nullItemIndex];
} catch (err) {
throw err;
}
},
};