newmax-utils
Version:
Utils & Libs for Newmax Tech
72 lines (71 loc) • 3.03 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.serviceInvoker = void 0;
const ApiError_1 = require("./ApiError");
const Winston_1 = require("./libs/Winston");
const env_1 = require("./configs/env");
const winston_config_1 = require("./configs/winston.config");
const Sequelize_1 = require("./utils/Sequelize");
const parseQuery_1 = require("./utils/parseQuery");
async function serviceInvoker(req, res, callback, schemaName, options) {
const headers = req.headers || {};
//
const Logger = new Winston_1.Winston({ schema: schemaName });
const logger = Logger.createInstance({
fn: callback?.name ?? 'unnamed',
console: { disable: (options?.skipConsole || !!headers['skip-console']) ?? false },
telegram: { disable: (options?.skipTelegram || !!headers['skip-telegram']) ?? false },
});
const profiler = logger.startTimer();
const profilerMeta = {
port: env_1.env.PORT,
env: env_1.env.NODE_ENV,
fn: callback?.name ?? 'unnamed',
schema: schemaName,
service: env_1.env.SERVICE_NAME || 'common',
};
logger.info('Service has been started');
try {
req.query = (0, parseQuery_1.parseQuery)(req.query);
const data = await callback(req.body, req.query);
profiler.done({
level: winston_config_1.winstonConfig.levelsEnums.done,
message: 'Service completed success',
...profilerMeta,
});
if (data.error) {
return res
? res.status(data.error.status).send({ error: data.error, payload: null })
: { error: data.error, payload: null };
}
return res ? res.send(data) : { status: 200 };
}
catch (error) {
const result = { payload: null, error };
const profilerData = {
error,
level: winston_config_1.winstonConfig.levelsEnums.error,
message: 'Service completed with error: ',
...profilerMeta,
};
if (error instanceof ApiError_1.ApiError) {
profiler.done({ ...profilerData, message: profilerData.message + error.error.message });
result.error = error.error;
return res
? res.status(error.error.statusCode).send(result)
: { status: error.error.statusCode };
}
if (error instanceof Sequelize_1.SequelizeError) {
profiler.done({ ...profilerData, message: profilerData.message + error.message });
return res ? res.status(error.status).send(result) : { status: error.status };
}
// Показываем в консоль, если ошибка из-за чепятки
if (error instanceof Error) {
console.log(error);
result.error = { status: 400, message: error.message };
return res ? res.status(400).send(result) : { status: 400 };
}
return String(error);
}
}
exports.serviceInvoker = serviceInvoker;