UNPKG

@golemio/pid

Version:
137 lines 6.95 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.RopidVYMIEventsStopsModel = void 0; const models_1 = require("./"); const GTFSStopModel_1 = require("../../ropid-gtfs/models/GTFSStopModel"); const shared_1 = require("../../shared"); const const_1 = require("../../../schema-definitions/const"); const ropid_gtfs_1 = require("../../../schema-definitions/ropid-gtfs"); const ropid_vymi_1 = require("../../../schema-definitions/ropid-vymi"); const output_gateway_1 = require("@golemio/core/dist/output-gateway"); const ioc_1 = require("@golemio/core/dist/output-gateway/ioc/"); const sequelize_1 = __importDefault(require("@golemio/core/dist/shared/sequelize")); const InfotextDisplayTypeEnum_1 = require("../domain/InfotextDisplayTypeEnum"); /** * Custom Postgres model for Ropid VYMI Events */ class RopidVYMIEventsStopsModel extends output_gateway_1.SequelizeModel { GetAll(options) { throw new Error("Method not implemented."); } GetOne(id) { throw new Error("Method not implemented."); } constructor() { super(ropid_vymi_1.RopidVYMI.eventsStops.name + "Model", ropid_vymi_1.RopidVYMI.eventsStops.pgTableName, ropid_vymi_1.RopidVYMI.eventsStops.outputSequelizeAttributes, { schema: const_1.PG_SCHEMA }); /** * Retrieve all infotexts with routes */ this.GetAllWithRoutes = async (timezone) => { const currentDateISO = new Date().toISOString(); const data = await this.sequelizeModel.findAll({ attributes: [ "valid_from", "valid_to", "text", "stop_type", [sequelize_1.default.literal("vymi_event.vymi_id"), "vymi_id"], [sequelize_1.default.literal("vymi_event.vymi_id_dtb"), "vymi_id_dtb"], [sequelize_1.default.literal("vymi_event.expiration_date"), "expiration_date"], [sequelize_1.default.literal("vymi_event.ropid_updated_at"), "last_updated"], [sequelize_1.default.literal("vymi_event.ropid_updated_by"), "last_updated_user"], [ sequelize_1.default.literal( // eslint-disable-next-line max-len "ARRAY_AGG(DISTINCT jsonb_build_object('id', gtfs_stop_id, 'name', gtfs_stop.stop_name, 'platform_code', gtfs_stop.platform_code))"), "related_stops", ], [sequelize_1.default.literal("ARRAY_REMOVE(ARRAY_AGG(DISTINCT vymi_route.gtfs_route_id), NULL)"), "related_routes"], ], include: [ { attributes: [], as: "vymi_event", model: this.dbConnector.getConnection().models[ropid_vymi_1.RopidVYMI.events.pgTableName], where: { time_from: { [sequelize_1.default.Op.lte]: currentDateISO, }, expiration_date: { [sequelize_1.default.Op.or]: [null, { [sequelize_1.default.Op.gte]: currentDateISO }], }, }, }, { attributes: [], as: "vymi_route", model: this.dbConnector.getConnection().models[ropid_vymi_1.RopidVYMI.eventsRoutes.pgTableName], }, { attributes: [], as: "gtfs_stop", model: this.dbConnector.getConnection().models[ropid_gtfs_1.RopidGTFS.stops.pgTableName], }, ], where: { text: { [sequelize_1.default.Op.and]: [{ [sequelize_1.default.Op.ne]: null }, { [sequelize_1.default.Op.ne]: "" }], }, }, group: [ "ropidvymi_events_stops.valid_from", "ropidvymi_events_stops.valid_to", "ropidvymi_events_stops.text", "stop_type", "vymi_event.vymi_id", ], raw: true, }); return this.mapDataWithRoutes(data, timezone); }; this.mapDataWithRoutes = (items, timezone) => { return items.map((item) => { const { vymi_id, vymi_id_dtb, stop_type: stopType, expiration_date, last_updated, valid_from, valid_to, last_updated_user, ...infotextsStopModel } = item; return { vymi_id: vymi_id, vymi_id_dtb: vymi_id_dtb, display_type: this.mapStopTypeToDisplayType(stopType), text_en: null, ...infotextsStopModel, expiration_date: shared_1.RopidRouterUtils.formatTimestamp(expiration_date, timezone), last_updated: shared_1.RopidRouterUtils.formatTimestamp(last_updated, timezone), last_updated_user: last_updated_user, valid_from: shared_1.RopidRouterUtils.formatTimestamp(valid_from, timezone), valid_to: shared_1.RopidRouterUtils.formatTimestamp(valid_to, timezone), }; }); }; this.mapStopTypeToDisplayType = (stopType) => { // stop type 1 and 9 leads to general infotext type return stopType === 1 || stopType === 9 ? InfotextDisplayTypeEnum_1.InfotextDisplayType.General : InfotextDisplayTypeEnum_1.InfotextDisplayType.Inline; }; this.dbConnector = ioc_1.OutputGatewayContainer.resolve(ioc_1.ContainerToken.PostgresDatabase); this.eventsModel = new models_1.RopidVYMIEventsModel(); this.eventsRoutesModel = new models_1.RopidVYMIEventsRoutesModel(); this.gtfsStopsModel = new GTFSStopModel_1.GTFSStopModel(); this.sequelizeModel.belongsTo(this.eventsModel.sequelizeModel, { as: "vymi_event", targetKey: "vymi_id", foreignKey: "event_id", }); this.sequelizeModel.hasMany(this.eventsRoutesModel.sequelizeModel, { as: "vymi_route", foreignKey: "event_id", sourceKey: "event_id", }); this.sequelizeModel.hasOne(this.gtfsStopsModel.sequelizeModel, { as: "gtfs_stop", foreignKey: "stop_id", sourceKey: "gtfs_stop_id", }); } } exports.RopidVYMIEventsStopsModel = RopidVYMIEventsStopsModel; //# sourceMappingURL=RopidVYMIEventsStopsModel.js.map