@golemio/parkings
Version:
Golemio Parkings Module
431 lines • 15.9 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.Parkings = exports.Parkomats = void 0;
const sequelize_1 = __importDefault(require("@golemio/core/dist/shared/sequelize"));
const KORIDConfDatasourceJSONSchema = {
type: "object",
required: ["time", "geojson", "tarif"],
additionalProperties: true,
properties: {
type: { type: "string" },
version: { type: "string" },
time: { type: "integer" },
geojson: {
type: "object",
required: ["type", "features"],
additionalProperties: true,
properties: {
type: { type: "string" },
features: {
type: "array",
additionalProperties: true,
minItems: 1,
items: {
type: "object",
required: ["type", "properties", "geometry"],
additionalProperties: false,
properties: {
type: { type: "string" },
properties: {
type: "object",
required: ["groupid", "title", "total", "tarif"],
additionalProperties: true,
properties: {
groupid: { type: "number" },
title: { type: "string" },
total: { type: "number" },
tarif: { type: "string" },
},
},
geometry: {
type: "object",
required: ["type", "coordinates"],
additionalProperties: false,
properties: {
type: { type: "string" },
coordinates: { type: "array" },
},
},
},
},
},
},
},
tarif: {
type: "object",
required: ["lastUpdated", "paymentMode", "freeOfCharge", "chargeBand"],
additionalProperties: true,
properties: {
lastUpdated: { type: "string" },
paymentMode: {
type: "array",
items: { type: "string" },
},
paymentAdditionalDescription: { type: "string" },
freeOfCharge: { type: "boolean" },
urlLinkAddress: { type: "string" },
chargeBand: {
type: "array",
additionalProperties: false,
items: {
type: "object",
required: ["chargeBandName", "chargeCurrency", "charge"],
additionalProperties: true,
properties: {
chargeBandName: { type: "string" },
acceptedMeansOfPayment: {
type: "array",
items: { type: "string" },
},
chargeCurrency: { type: "string" },
charge: {
type: "array",
required: ["charge", "chargeOrderIndex", "chargeInterval"],
additionalProperties: true,
items: {
charge: { type: "number" },
chargeType: { type: "string" },
chargeOrderIndex: { type: "number" },
chargeInterval: { type: "number" },
maxIterationsOfCharge: { type: "number" },
minIterationsOfCharge: { type: "number" },
startTimeOfPeriod: { type: "string" },
endTimeOfPeriod: { type: "string" },
},
},
},
},
},
},
},
},
};
const KORIDDatasourceJSONSchema = {
type: "object",
required: ["time", "data"],
additionalProperties: true,
properties: {
type: { type: "string" },
version: { type: "string" },
time: { type: "integer" },
data: {
type: "object",
additionalProperties: {
type: "object",
required: ["tot", "fr", "occ", "cls"],
additionalProperties: false,
properties: {
tot: { type: "integer" },
fr: { type: "integer" },
occ: { type: "integer" },
cls: { type: "integer" },
},
},
},
},
};
const parkingSDMA = {
id: {
type: sequelize_1.default.STRING,
unique: true,
},
source: {
primaryKey: true,
type: sequelize_1.default.STRING,
},
source_id: {
primaryKey: true,
type: sequelize_1.default.STRING,
},
data_provider: sequelize_1.default.STRING,
name: sequelize_1.default.STRING,
category: sequelize_1.default.STRING,
date_modified: sequelize_1.default.BIGINT,
address: sequelize_1.default.JSON,
location: sequelize_1.default.GEOMETRY,
area_served: sequelize_1.default.STRING,
total_spot_number: sequelize_1.default.INTEGER,
valid_from: sequelize_1.default.DATE,
valid_to: sequelize_1.default.DATE,
parking_type: sequelize_1.default.STRING,
zone_type: sequelize_1.default.STRING,
centroid: sequelize_1.default.GEOMETRY,
security: sequelize_1.default.BOOLEAN,
max_vehicle_dimensions: {
allowNull: true,
type: sequelize_1.default.ARRAY(sequelize_1.default.REAL),
},
covered: sequelize_1.default.BOOLEAN,
contact: sequelize_1.default.JSON,
parking_policy: sequelize_1.default.STRING,
sanitized_location: sequelize_1.default.GEOMETRY,
area: sequelize_1.default.INTEGER,
active: sequelize_1.default.BOOLEAN,
// ⬐ Auditni pole
create_batch_id: { type: sequelize_1.default.BIGINT },
created_at: { type: sequelize_1.default.DATE },
created_by: { type: sequelize_1.default.STRING(150) },
update_batch_id: { type: sequelize_1.default.BIGINT },
updated_at: { type: sequelize_1.default.DATE },
updated_by: { type: sequelize_1.default.STRING(150) },
address_updated_at: { type: sequelize_1.default.DATE }, // kdy se aktualizovala adresa
};
const parkingsFilteredSDMA = { ...parkingSDMA };
const parkingsMeasurementSDMA = {
source: {
primaryKey: true,
allowNull: false,
type: sequelize_1.default.STRING,
},
source_id: {
primaryKey: true,
type: sequelize_1.default.STRING,
},
parking_id: sequelize_1.default.STRING,
available_spot_number: sequelize_1.default.INTEGER,
closed_spot_number: sequelize_1.default.INTEGER,
occupied_spot_number: sequelize_1.default.INTEGER,
total_spot_number: sequelize_1.default.INTEGER,
date_modified: {
primaryKey: true,
type: sequelize_1.default.BIGINT,
},
// ⬐ Auditni pole
create_batch_id: { type: sequelize_1.default.BIGINT },
created_at: { type: sequelize_1.default.DATE },
created_by: { type: sequelize_1.default.STRING(150) },
update_batch_id: { type: sequelize_1.default.BIGINT },
updated_at: { type: sequelize_1.default.DATE },
updated_by: { type: sequelize_1.default.STRING(150) }, // Identikace uživatele/procesu, který poslední měnil záznam
};
const parkingsMeasurementActualSDMA = {
...parkingsMeasurementSDMA,
date_modified: sequelize_1.default.BIGINT,
};
const datasourceIPRJSONSchema = {
type: "array",
items: {
type: "object",
required: ["geometry", "properties", "type"],
additionalProperties: true,
properties: {
type: { type: "string" },
id: { type: "number" },
geometry: {
type: "object",
required: ["type", "coordinates"],
additionalProperties: false,
properties: {
type: { type: "string" },
coordinates: { type: "array" },
},
},
properties: {
type: "object",
required: ["TARIFTAB"],
additionalProperties: true,
properties: {
OBJECTID: { type: "number" },
PS_ZPS: { type: "string" },
SHAPE__Area: { type: "number" },
SHAPE__Length: { type: "number" },
TARIFTAB: { type: "string" },
TYPZONY: { type: "string" },
ZPS_ID: { type: "string" },
},
},
},
},
};
const datasourceTSKJSONSchema = {
type: "array",
items: {
type: "object",
required: ["geometry", "properties", "type"],
additionalProperties: true,
properties: {
type: { type: "string" },
geometry: {
type: "object",
required: ["type", "coordinates"],
additionalProperties: false,
properties: {
type: { type: "string" },
coordinates: { type: "array" },
},
},
properties: {
type: "object",
required: ["tarifTab", "ps_zps_celkem", "typZony", "tarifName", "platnostOd", "platnostDo"],
additionalProperties: true,
properties: {
tarifTab: { type: "string" },
ps_zps_celkem: { type: "number" },
typZony: { type: "string" },
tarifName: { type: "string" },
platnostOd: { type: "string" },
platnostDo: { type: "string" },
ulice: { type: ["string", "null"] },
TARIF: { type: "number" },
CTARIF: { type: "number" },
},
},
},
},
};
const datasourceTSKTariffJSONSchema = {
type: "array",
items: {
type: "object",
required: ["TARIF", "CTARIF", "Day", "PricePerHour", "MaxParkingTime", "MaxPrice", "TimeFrom", "TimeTo", "PayAtHoliday"],
additionalProperties: true,
properties: {
TARIF: { type: "string" },
CTARIF: { type: "string" },
Day: { type: "string" },
PricePerHour: { type: "string" },
MaxParkingTime: { type: "string" },
MaxPrice: { type: "string" },
TimeFrom: { type: "string" },
TimeTo: { type: "string" },
PayAtHoliday: { type: "string" },
},
},
};
const outputLocationJsonSchema = {
type: "array",
items: {
$ref: "#/$defs/Item",
},
$defs: {
Item: {
type: "object",
properties: {
id: {
type: "string",
},
source: {
type: "string",
},
source_id: {
type: "string",
},
data_provider: {
type: "string",
},
location: {
type: "object",
},
centroid: {
type: "object",
},
address: {
type: "object",
},
total_spot_number: {
oneOf: [
{
type: "integer",
},
{
type: "null",
nullable: true,
},
],
},
special_access: {
oneOf: [
{
type: "array",
items: {
type: "string",
},
},
{
type: "null",
nullable: true,
},
],
},
},
required: ["id", "data_provider", "location", "total_spot_number", "source", "source_id"],
},
},
};
const outputLocationSDMA = {
id: {
type: sequelize_1.default.STRING,
primaryKey: true,
},
source: sequelize_1.default.STRING,
source_id: sequelize_1.default.STRING,
data_provider: sequelize_1.default.STRING,
location: sequelize_1.default.GEOMETRY,
centroid: sequelize_1.default.GEOMETRY,
address: sequelize_1.default.JSON,
total_spot_number: sequelize_1.default.INTEGER,
special_access: sequelize_1.default.ARRAY(sequelize_1.default.STRING(50)),
// ⬐ Audit fields
create_batch_id: { type: sequelize_1.default.BIGINT },
created_at: { type: sequelize_1.default.DATE },
created_by: { type: sequelize_1.default.STRING(150) },
update_batch_id: { type: sequelize_1.default.BIGINT },
updated_at: { type: sequelize_1.default.DATE },
updated_by: { type: sequelize_1.default.STRING(150) },
address_updated_at: { type: sequelize_1.default.DATE },
};
const forExport = {
name: "Parkings",
pgSchema: "parkings",
ipr: {
datasourceJsonSchema: datasourceIPRJSONSchema,
name: "IPRParking",
},
tsk: {
datasourceGeoJsonSchema: datasourceTSKJSONSchema,
datasourceTariffJsonSchema: datasourceTSKTariffJSONSchema,
name: "TSKParking",
},
korid: {
datasourceJsonConfSchema: KORIDConfDatasourceJSONSchema,
datasourceJsonSchema: KORIDDatasourceJSONSchema,
name: "KoridParkings",
},
parkings: {
outputSequelizeAttributes: parkingSDMA,
pgTableName: "parkings",
},
parkingsFiltered: {
name: "ParkingsFiltered",
outputSequelizeAttributes: parkingsFilteredSDMA,
pgTableName: "v_parkings_filtered",
},
location: {
name: "ParkingsLocation",
outputJsonSchema: outputLocationJsonSchema,
outputSequelizeAttributes: outputLocationSDMA,
pgTableName: "parkings_location",
},
measurements: {
name: "ParkingsMeasurements",
outputSequelizeAttributes: parkingsMeasurementSDMA,
pgTableName: "parkings_measurements_part",
},
measurementsActual: {
name: "ParkingsMeasurementsActual",
outputSequelizeAttributes: parkingsMeasurementActualSDMA,
pgTableName: "parkings_measurements_actual",
},
latestMeasurements: {
name: "ParkingsLatestMeasurements",
outputSequelizeAttributes: parkingsMeasurementSDMA,
pgTableName: "v_parkings_latest_measurements",
},
};
exports.Parkings = forExport;
var Parkomats_1 = require("./Parkomats");
Object.defineProperty(exports, "Parkomats", { enumerable: true, get: function () { return Parkomats_1.Parkomats; } });
//# sourceMappingURL=index.js.map