@tasolutions/express-core
Version:
All libs for express
94 lines (77 loc) • 4.46 kB
JavaScript
;
const { applicationName } = require('../config');
const _ = require('lodash');
const { apiConfigService } = require('../clients/configService');
const redisService = require('../redis');
module.exports = {
throwError: (layer, class_name, function_name, case_name, messageTemplate, status = 400, variable = {}) => {
const type = 'ERROR';
apiConfigService.send(layer, class_name, function_name, case_name, messageTemplate, status, type);
const key = `${applicationName}:${type}_${layer}_${class_name}_${function_name}_${case_name}_${status}`.toUpperCase().replace(/ /g, '_');
const response_message_template = { layer, class_name, function_name, case_name: case_name, type, message: messageTemplate, status };
const template = _.template(messageTemplate);
let message = messageTemplate;
try {
message = template(variable);
} catch (err) {
message = messageTemplate;
}
throw { key, message, response_message_template };
},
messageError: async (layer, class_name, function_name, case_name, messageTemplate, status = 400, variable = {}, acceptLanguage = 'en') => {
const type = 'ERROR';
apiConfigService.send(layer, class_name, function_name, case_name, messageTemplate, status, type);
const key = `${applicationName}:${type}_${layer}_${class_name}_${function_name}_${case_name}_${status}`.toUpperCase().replace(/ /g, '_');
const response_message_template = { layer, class_name, function_name, case_name: case_name, type, message: messageTemplate, status };
// Kiểm tra cache trước
const cachedMessage = await redisService.get(key);
if (cachedMessage) {
messageTemplate = cachedMessage[acceptLanguage] || cachedMessage['default'] || messageTemplate;
} else {
try {
const resConfig = await apiConfigService.get(key, acceptLanguage);
messageTemplate = resConfig ? resConfig : messageTemplate; // Cập nhật messageTemplate nếu có dữ liệu từ API
// Lưu vào cache
await redisService.set(key, { ...cachedMessage, ...resConfig }); // Cập nhật thông điệp vào cache
} catch (err) {
console.log('[messageError][resConfig]', err.message); // Ghi log lỗi
}
}
const template = _.template(messageTemplate);
let message = messageTemplate;
try {
message = template(variable);
} catch (err) {
message = messageTemplate; // Trả về thông điệp gốc nếu có lỗi
}
return { key, message, response_message_template };
},
messageSuccess: async (layer, class_name, function_name, case_name, messageTemplate, status = 400, variable = {}, acceptLanguage = 'en') => {
const type = 'SUCCESS';
apiConfigService.send(layer, class_name, function_name, case_name, messageTemplate, status, type);
const key = `${applicationName}:${type}_${layer}_${class_name}_${function_name}_${case_name}_${status}`.toUpperCase().replace(/ /g, '_');
const response_message_template = { layer, class_name, function_name, case_name: case_name, type, message: messageTemplate, status };
// Kiểm tra cache trước
const cachedMessage = await redisService.get(key);
if (cachedMessage) {
messageTemplate = cachedMessage[acceptLanguage] || cachedMessage['default'] || messageTemplate;
} else {
try {
const resConfig = await apiConfigService.get(key, acceptLanguage);
messageTemplate = resConfig ? resConfig : messageTemplate; // Cập nhật messageTemplate nếu có dữ liệu từ API
// Lưu vào cache
await redisService.set(key, { ...cachedMessage, ...resConfig }); // Cập nhật thông điệp vào cache
} catch (err) {
console.log('[messageSuccess][resConfig]', err.message); // Ghi log lỗi
}
}
const template = _.template(messageTemplate);
let message = messageTemplate;
try {
message = template(variable);
} catch (err) {
message = messageTemplate; // Trả về thông điệp gốc nếu có lỗi
}
return { key, message, response_message_template };
},
};