@citrineos/data
Version:
The OCPP data module which includes all persistence layer implementation.
87 lines • 4.12 kB
JavaScript
;
// 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