@golemio/parkings
Version:
Golemio Parkings Module
116 lines • 4.89 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ParkingsMeasurementsModels = void 0;
const _sch_1 = require("../../schema-definitions");
const output_gateway_1 = require("@golemio/core/dist/output-gateway");
const sequelize_1 = __importDefault(require("@golemio/core/dist/shared/sequelize"));
const golemio_errors_1 = require("@golemio/core/dist/shared/golemio-errors");
class ParkingsMeasurementsModels extends output_gateway_1.SequelizeModel {
constructor(modelDefinition) {
super(modelDefinition.name, modelDefinition.pgTableName, modelDefinition.outputSequelizeAttributes, {
schema: _sch_1.Parkings.pgSchema,
});
this.GetAll = async (options) => {
const { measureFrom, measureTo, limit, offset, source, sourceId, minutesBefore, updatedSince } = options;
const order = [];
let where = {};
let attributes = { include: [], exclude: [] };
if (source) {
where.source = {
[sequelize_1.default.Op.in]: source,
};
}
if (sourceId) {
where.source_id = sourceId;
}
if (measureFrom) {
where.date_modified = measureTo
? { [sequelize_1.default.Op.between]: [measureFrom, measureTo] }
: { [sequelize_1.default.Op.gte]: measureFrom };
}
else {
if (measureTo) {
where.date_modified = { [sequelize_1.default.Op.lte]: measureTo };
}
}
if (minutesBefore) {
where.updated_at = {
[sequelize_1.default.Op.gte]: sequelize_1.default.literal(`NOW() - INTERVAL '${minutesBefore} minutes'`),
};
}
if (updatedSince) {
where.updated_at = {
[sequelize_1.default.Op.gte]: updatedSince,
};
}
order.push(["date_modified", "desc"]);
try {
return await this.sequelizeModel.findAll({
attributes,
limit,
offset,
order,
raw: true,
where,
});
}
catch (err) {
throw new golemio_errors_1.GeneralError(`Database error: ${err.message}`, "ParkingMeasurementsModel", err, 500);
}
};
/**
* Get TSK measurements for the legacy history endpoint (/parkings/history)
*/
this.GetAllTskMeasurements = async (options) => {
const { limit, offset, from, to, sensorId } = options;
let where = {
source: { [sequelize_1.default.Op.in]: ["tsk", "TSK"] },
};
if (sensorId) {
where.source_id = sensorId;
}
if (from) {
where.date_modified = to ? { [sequelize_1.default.Op.between]: [from, to] } : { [sequelize_1.default.Op.gte]: from };
}
else {
if (to) {
where.date_modified = { [sequelize_1.default.Op.lte]: to };
}
}
try {
const result = await this.sequelizeModel.findAll({
attributes: [
["source_id", "id"],
["available_spot_number", "num_of_free_places"],
["occupied_spot_number", "num_of_taken_places"],
"updated_at",
["total_spot_number", "total_num_of_places"],
["date_modified", "last_updated"],
],
limit,
offset,
order: [["date_modified", "desc"]],
raw: true,
where,
});
return result.map((record) => {
const { id, last_updated, ...rest } = record;
return {
id: Number.isNaN(parseInt(id)) ? id : parseInt(id),
last_updated: last_updated ? new Date(last_updated).getTime() : null,
...rest,
};
});
}
catch (err) {
throw new golemio_errors_1.GeneralError("GetAllTskMeasurements: Error while fetching measurements", this.constructor.name, err, 500);
}
};
this.GetOne = async () => { };
}
}
exports.ParkingsMeasurementsModels = ParkingsMeasurementsModels;
//# sourceMappingURL=ParkingsMeasurementsModels.js.map