UNPKG

@citrineos/data

Version:

The OCPP data module which includes all persistence layer implementation.

87 lines 4.12 kB
"use strict"; // Copyright (c) 2023 S44, LLC // Copyright Contributors to the CitrineOS Project // // SPDX-License-Identifier: Apache 2.0 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SequelizeReservationRepository = void 0; const Base_1 = require("./Base"); const tslog_1 = require("tslog"); const Reservation_1 = require("../model/Reservation"); const DeviceModel_1 = require("../model/DeviceModel"); class SequelizeReservationRepository extends Base_1.SequelizeRepository { constructor(config, logger, sequelizeInstance, evse) { super(config, Reservation_1.Reservation.MODEL_NAME, logger, sequelizeInstance); this.evse = evse ? evse : new Base_1.SequelizeRepository(config, DeviceModel_1.Evse.MODEL_NAME, logger, sequelizeInstance); this.logger = logger ? logger.getSubLogger({ name: this.constructor.name }) : new tslog_1.Logger({ name: this.constructor.name }); } createOrUpdateReservation(tenantId, reserveNowRequest, stationId, isActive) { return __awaiter(this, void 0, void 0, function* () { var _a, _b; let evseDBId = null; if (reserveNowRequest.evseId) { const [evse] = yield this.evse.readAllByQuery(tenantId, { where: { id: reserveNowRequest.evseId, connectorId: null, }, }); if (!evse) { this.logger.error(`Could not find evse with id ${reserveNowRequest.evseId}`); return undefined; } else { evseDBId = evse.databaseId; } } const [storedReservation, created] = yield this.readOrCreateByQuery(tenantId, { where: { tenantId, // unique constraints stationId, id: reserveNowRequest.id, }, defaults: { expiryDateTime: reserveNowRequest.expiryDateTime, connectorType: reserveNowRequest.connectorType, evseId: evseDBId, idToken: reserveNowRequest.idToken, groupIdToken: reserveNowRequest.groupIdToken ? reserveNowRequest.groupIdToken : null, }, }); if (!created) { return yield this.updateByKey(tenantId, { expiryDateTime: reserveNowRequest.expiryDateTime, connectorType: (_a = reserveNowRequest.connectorType) !== null && _a !== void 0 ? _a : null, evseId: evseDBId, idToken: reserveNowRequest.idToken, groupIdToken: (_b = reserveNowRequest.groupIdToken) !== null && _b !== void 0 ? _b : null, isActive, }, storedReservation.databaseId.toString()); } else { return storedReservation; } }); } getNextReservationId(tenantId, stationId) { return __awaiter(this, void 0, void 0, function* () { return yield this.readNextValue(tenantId, 'id', { where: { stationId } }); }); } } exports.SequelizeReservationRepository = SequelizeReservationRepository; //# sourceMappingURL=Reservation.js.map