UNPKG

@golemio/parkings

Version:
116 lines 4.89 kB
"use strict"; 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