redis-smq-rest-api
Version:
A RESTful API for RedisSMQ
71 lines • 4.08 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.registerResources = registerResources;
const router_1 = __importDefault(require("@koa/router"));
const redis_smq_common_1 = require("redis-smq-common");
const Container_js_1 = require("../../app/container/Container.js");
const getErrorResponseParams_js_1 = require("../../app/errors/getErrorResponseParams.js");
const schema_generator_js_1 = require("../validator/schema-generator.js");
const ValidateRequestMiddleware_js_1 = require("./middlewares/ValidateRequestMiddleware.js");
const ValidateResponseMiddleware_js_1 = require("./middlewares/ValidateResponseMiddleware.js");
const parser_js_1 = require("./parser.js");
function registerRoute(appRouter, controller, controllerName, method, payload, routePath, schema) {
return __awaiter(this, void 0, void 0, function* () {
const requestSchema = schema.getRequestSchemas(controllerName, payload);
const requestValidatorMap = schema.getRequestValidators(requestSchema);
const responseSchema = schema.getResponseSchemas(controllerName);
const responseValidatorMap = schema.getResponseValidators(responseSchema);
appRouter[method](routePath, (0, ValidateRequestMiddleware_js_1.ValidateRequestMiddleware)(requestValidatorMap), (ctx, next) => __awaiter(this, void 0, void 0, function* () {
try {
const [status, payload] = yield controller(ctx, next);
const data = payload !== null && payload !== void 0 ? payload : null;
ctx.status = status;
ctx.body = data === null && status === 204 ? null : { data };
ctx.state.responseSchemaKey = 'OK';
}
catch (e) {
if (e instanceof redis_smq_common_1.RedisSMQError) {
const reply = (0, getErrorResponseParams_js_1.getErrorResponseParams)(e);
const [code, message] = reply;
ctx.state.responseSchemaKey = message;
ctx.status = code;
ctx.body = {
error: {
code: code,
message: message,
details: {},
},
};
}
else
throw e;
}
return next();
}), (0, ValidateResponseMiddleware_js_1.ValidateResponseMiddleware)(responseValidatorMap));
});
}
function registerResources(routingMap) {
return __awaiter(this, void 0, void 0, function* () {
const { apiServer } = Container_js_1.Container.getInstance().resolve('config');
const { basePath } = apiServer;
const appRouter = new router_1.default({ prefix: basePath.length > 1 ? basePath : undefined });
const schema = (0, schema_generator_js_1.SchemaGenerator)();
yield (0, parser_js_1.parseRoutingMap)(routingMap, (controller, controllerName, method, payload, path) => __awaiter(this, void 0, void 0, function* () {
yield registerRoute(appRouter, controller, controllerName, method, payload, path, schema);
}));
return appRouter;
});
}
//# sourceMappingURL=index.js.map