@citrineos/data
Version:
The OCPP data module which includes all persistence layer implementation.
68 lines • 2.75 kB
JavaScript
import { CrudRepository, OCPP2_0_1 } from '@citrineos/base';
import { SequelizeRepository } from './Base.js';
import { Sequelize } from 'sequelize-typescript';
import { Logger } from 'tslog';
import { EvseType, Reservation } from '../model/index.js';
export class SequelizeReservationRepository extends SequelizeRepository {
evse;
logger;
constructor(config, logger, sequelizeInstance, evse) {
super(config, Reservation.MODEL_NAME, logger, sequelizeInstance);
this.evse = evse
? evse
: new SequelizeRepository(config, EvseType.MODEL_NAME, logger, sequelizeInstance);
this.logger = logger
? logger.getSubLogger({ name: this.constructor.name })
: new Logger({ name: this.constructor.name });
}
async createOrUpdateReservation(tenantId, reserveNowRequest, stationId, isActive) {
let evseDBId = null;
if (reserveNowRequest.evseId) {
const [evse] = await 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] = await 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 await this.updateByKey(tenantId, {
expiryDateTime: reserveNowRequest.expiryDateTime,
connectorType: reserveNowRequest.connectorType ?? null,
evseId: evseDBId,
idToken: reserveNowRequest.idToken,
groupIdToken: reserveNowRequest.groupIdToken ?? null,
isActive,
}, storedReservation.databaseId.toString());
}
else {
return storedReservation;
}
}
async getNextReservationId(tenantId, stationId) {
return await this.readNextValue(tenantId, 'id', { where: { stationId } });
}
}
//# sourceMappingURL=Reservation.js.map