UNPKG

@citrineos/data

Version:

The OCPP data module which includes all persistence layer implementation.

68 lines 2.75 kB
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