@golemio/pid
Version:
Golemio PID Module
83 lines • 5.44 kB
JavaScript
"use strict";
/**
* Router /WEB LAYER/: maps routes to specific controller functions, passes request parameters and handles responses.
* Handles web logic (http request, response). Sets response headers, handles error responses.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.v2PidRouter = exports.V2PIDRouter = void 0;
const V2DepartureBoardsController_1 = require("../../controllers/v2/V2DepartureBoardsController");
const V2InfotextsController_1 = require("../../controllers/v2/V2InfotextsController");
const ParamValidatorManager_1 = require("../../helpers/ParamValidatorManager");
const constants_1 = require("../../../shared/constants");
const AbstractRouter_1 = require("@golemio/core/dist/helpers/routing/AbstractRouter");
const Validation_1 = require("@golemio/core/dist/output-gateway/Validation");
const ioc_1 = require("@golemio/core/dist/output-gateway/ioc");
const express_1 = require("@golemio/core/dist/shared/express");
const express_validator_1 = require("@golemio/core/dist/shared/express-validator");
const const_1 = require("../../../../const");
class V2PIDRouter extends AbstractRouter_1.AbstractRouter {
constructor() {
super(constants_1.RouteVersion.v2, "pid");
this.router = (0, express_1.Router)();
this.initRoutes = () => {
this.registerDepartureBoardsRoutes();
this.registerInfotextsRoutes();
};
this.registerDepartureBoardsRoutes = () => {
const { preferredTimezone, departureBoards: { departureMode, order, filter, skip }, } = constants_1.ValidationArrays;
const validation = [
(0, express_validator_1.query)("aswIds").optional(),
(0, express_validator_1.query)("cisIds").optional(),
(0, express_validator_1.query)("ids").optional(),
(0, express_validator_1.query)("names").optional(),
(0, express_validator_1.oneOf)([
(0, express_validator_1.query)("aswIds").exists().custom(ParamValidatorManager_1.ParamValidatorManager.getAswIdsValidator()),
(0, express_validator_1.query)("cisIds").exists().isInt({ min: const_1.PG_INT_MIN, max: const_1.PG_INT_MAX }),
(0, express_validator_1.query)("ids").exists().not().isEmpty({ ignore_whitespace: true }),
(0, express_validator_1.query)("names").exists().not().isEmpty({ ignore_whitespace: true }),
]),
(0, express_validator_1.query)("minutesBefore")
.optional()
.isInt(process.env.NODE_ENV === "test"
? {}
: { lt: const_1.DATA_RETENTION_IN_MINUTES + 1, gt: -1 * (const_1.GTFS_CALENDAR_LIMIT_IN_MINUTES + 1) })
.not()
.isArray(),
(0, express_validator_1.query)("minutesAfter")
.optional()
.isInt({
lt: const_1.GTFS_CALENDAR_LIMIT_IN_MINUTES + 1,
gt: -1 * (const_1.GTFS_CALENDAR_LIMIT_IN_MINUTES + const_1.DATA_RETENTION_IN_MINUTES + 1),
})
.not()
.isArray(),
(0, express_validator_1.query)("preferredTimezone").optional().isIn(preferredTimezone).not().isArray(),
(0, express_validator_1.query)("mode").optional().isIn(departureMode),
(0, express_validator_1.query)("order").optional().isIn(order).not().isArray(),
(0, express_validator_1.query)("filter").optional().isIn(filter).not().isArray(),
(0, express_validator_1.query)("skip").optional().isIn(skip),
(0, express_validator_1.query)("timeFrom").optional().isISO8601().custom(ParamValidatorManager_1.ParamValidatorManager.getTimeFromValidator()).not().isArray(),
(0, express_validator_1.query)("includeMetroTrains").optional().isBoolean().not().isArray(),
(0, express_validator_1.query)("airCondition").optional().isBoolean().not().isArray(),
(0, express_validator_1.query)("total").optional().isInt().not().isArray(),
];
this.router.get("/departureboards", validation, ...this.commonMiddleware("PIDDepartureBoards"),
// max-age 5 seconds, stale-while-revalidate 5 seconds
this.cacheHeaderMiddleware.getMiddleware(5, 5), this.departureBoardsController.getDepartureBoard);
};
this.registerInfotextsRoutes = () => {
this.router.get("/infotexts", ...this.commonMiddleware("PIDInfotexts"),
// max-age 25 seconds, stale-while-revalidate 10 seconds
this.cacheHeaderMiddleware.getMiddleware(25, 10), this.infotextsController.getInfotexts);
};
this.commonMiddleware = (name) => [Validation_1.pagination, Validation_1.checkErrors, (0, Validation_1.paginationLimitMiddleware)(name)];
this.cacheHeaderMiddleware = ioc_1.OutputGatewayContainer.resolve(ioc_1.ContainerToken.CacheHeaderMiddleware);
this.departureBoardsController = new V2DepartureBoardsController_1.V2DepartureBoardsController();
this.infotextsController = new V2InfotextsController_1.V2InfotextsController();
this.initRoutes();
}
}
exports.V2PIDRouter = V2PIDRouter;
const v2PidRouter = new V2PIDRouter();
exports.v2PidRouter = v2PidRouter;
//# sourceMappingURL=V2PIDRouter.js.map