@golemio/pid
Version:
Golemio PID Module
137 lines • 6.95 kB
JavaScript
"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