UNPKG

@citrineos/data

Version:

The OCPP data module which includes all persistence layer implementation.

157 lines (156 loc) 14.9 kB
import type { BootConfig, CallAction, ChargingStationSequenceTypeEnumType, CrudRepository, OCPP1_6, OCPP2_0_1, OCPPVersion } from '@citrineos/base'; import type { Authorization, Boot, Certificate, ChargingStation, Component, EventData, Evse, Location, SecurityEvent, Transaction, Variable, VariableAttribute, VariableMonitoring } from '../layers/sequelize/index.js'; import { ChangeConfiguration, ChargingNeeds, ChargingProfile, ChargingStationSecurityInfo, ChargingStationSequence, CompositeSchedule, Connector, EvseType, InstalledCertificate, LocalListVersion, MessageInfo, MeterValue, OCPPMessage, Reservation, SendLocalList, ServerNetworkProfile, StatusNotification, StopTransaction, Subscription, Tariff, Tenant, TransactionEvent, VariableCharacteristics } from '../layers/sequelize/index.js'; import type { VariableAttributeQuerystring } from './index.js'; import type { AuthorizationQuerystring } from './queries/Authorization.js'; import type { TariffQueryString } from './queries/Tariff.js'; export interface IAuthorizationRepository extends CrudRepository<Authorization> { readAllByQuerystring: (tenantId: number, query: AuthorizationQuerystring) => Promise<Authorization[]>; readOnlyOneByQuerystring: (tenantId: number, query: AuthorizationQuerystring) => Promise<Authorization | undefined>; } /** * Key is StationId */ export interface IBootRepository extends CrudRepository<BootConfig> { createOrUpdateByKey: (tenantId: number, value: BootConfig, key: string) => Promise<Boot | undefined>; updateStatusByKey: (tenantId: number, status: OCPP2_0_1.RegistrationStatusEnumType, statusInfo: OCPP2_0_1.StatusInfoType | undefined, key: string) => Promise<Boot | undefined>; updateLastBootTimeByKey: (tenantId: number, lastBootTime: string, key: string) => Promise<Boot | undefined>; readByKey: (tenantId: number, key: string) => Promise<Boot | undefined>; existsByKey: (tenantId: number, key: string) => Promise<boolean>; deleteByKey: (tenantId: number, key: string) => Promise<Boot | undefined>; } export interface IDeviceModelRepository extends CrudRepository<OCPP2_0_1.VariableAttributeType> { createOrUpdateDeviceModelByStationId(tenantId: number, value: OCPP2_0_1.ReportDataType, stationId: string, isoTimestamp: string): Promise<VariableAttribute[]>; createOrUpdateByGetVariablesResultAndStationId(tenantId: number, getVariablesResult: OCPP2_0_1.GetVariableResultType[], stationId: string, isoTimestamp: string): Promise<VariableAttribute[]>; createOrUpdateBySetVariablesDataAndStationId(tenantId: number, setVariablesData: OCPP2_0_1.SetVariableDataType[], stationId: string, isoTimestamp: string): Promise<VariableAttribute[]>; updateResultByStationId(tenantId: number, result: OCPP2_0_1.SetVariableResultType, stationId: string, isoTimestamp: string): Promise<VariableAttribute | undefined>; readAllSetVariableByStationId(tenantId: number, stationId: string): Promise<OCPP2_0_1.SetVariableDataType[]>; readAllByQuerystring(tenantId: number, query: VariableAttributeQuerystring): Promise<VariableAttribute[]>; existByQuerystring(tenantId: number, query: VariableAttributeQuerystring): Promise<number>; deleteAllByQuerystring(tenantId: number, query: VariableAttributeQuerystring): Promise<VariableAttribute[]>; findComponentAndVariable(tenantId: number, componentType: OCPP2_0_1.ComponentType, variableType: OCPP2_0_1.VariableType): Promise<[Component | undefined, Variable | undefined]>; findOrCreateEvseAndComponentAndVariable(tenantId: number, componentType: OCPP2_0_1.ComponentType, variableType: OCPP2_0_1.VariableType): Promise<[Component, Variable]>; findOrCreateEvseAndComponent(tenantId: number, componentType: OCPP2_0_1.ComponentType, stationId: string): Promise<Component>; findEvseByIdAndConnectorId(tenantId: number, id: number, connectorId: number | null): Promise<EvseType | undefined>; findVariableCharacteristicsByVariableNameAndVariableInstance(tenantId: number, variableName: string, variableInstance: string | null): Promise<VariableCharacteristics | undefined>; } export interface ILocalAuthListRepository extends CrudRepository<LocalListVersion> { /** * Creates a SendLocalList. * @param {number} tenantId - The tenant ID. * @param {string} stationId - The ID of the station. * @param {string} correlationId - The correlation ID. * @param {UpdateEnumType} updateType - The type of update. * @param {number} versionNumber - The version number. * @param {AuthorizationData[]} localAuthorizationList - The list of authorizations. * @return {SendLocalList} The database object. Contains the correlationId to be used for the sendLocalListRequest. */ createSendLocalListFromRequestData(tenantId: number, stationId: string, correlationId: string, updateType: OCPP2_0_1.UpdateEnumType, versionNumber: number, localAuthorizationList?: OCPP2_0_1.AuthorizationData[]): Promise<SendLocalList>; /** * Used to process GetLocalListVersionResponse, if version is unknown it will create or update LocalListVersion with the new version and an empty localAuthorizationList. * @param tenantId * @param versionNumber * @param stationId */ validateOrReplaceLocalListVersionForStation(tenantId: number, versionNumber: number, stationId: string): Promise<void>; getSendLocalListRequestByStationIdAndCorrelationId(tenantId: number, stationId: string, correlationId: string): Promise<SendLocalList | undefined>; /** * Used to process SendLocalListResponse. * @param tenantId * @param stationId * @param {SendLocalList} sendLocalList - The SendLocalList object created from the associated SendLocalListRequest. * @returns {LocalListVersion} LocalListVersion - The updated LocalListVersion. */ createOrUpdateLocalListVersionFromStationIdAndSendLocalList(tenantId: number, stationId: string, sendLocalList: SendLocalList): Promise<LocalListVersion>; } export interface ILocationRepository extends CrudRepository<Location> { readLocationById: (tenantId: number, id: number) => Promise<Location | undefined>; readChargingStationByStationId: (tenantId: number, stationId: string) => Promise<ChargingStation | undefined>; readConnectorByStationIdAndOcpp16ConnectorId: (tenantId: number, stationId: string, ocpp16ConnectorId: number) => Promise<Connector | undefined>; readEvseByStationIdAndOcpp201EvseId: (tenantId: number, stationId: string, ocpp201EvseId: number) => Promise<Evse | undefined>; readConnectorByStationIdAndOcpp201EvseType: (tenantId: number, stationId: string, ocpp201EvseType: OCPP2_0_1.EVSEType) => Promise<Connector | undefined>; setChargingStationIsOnlineAndOCPPVersion: (tenantId: number, stationId: string, isOnline: boolean, ocppVersion: OCPPVersion | null) => Promise<ChargingStation | undefined>; doesChargingStationExistByStationId: (tenantId: number, stationId: string) => Promise<boolean>; addStatusNotificationToChargingStation(tenantId: number, stationId: string, statusNotification: StatusNotification): Promise<void>; createOrUpdateChargingStation(tenantId: number, chargingStation: ChargingStation): Promise<ChargingStation>; createOrUpdateConnector(tenantId: number, connector: Connector): Promise<Connector | undefined>; updateAllConnectorsByQuery(tenantId: number, value: Partial<Connector>, query: object): Promise<Connector[]>; } export interface ISecurityEventRepository extends CrudRepository<SecurityEvent> { createByStationId: (tenantId: number, value: OCPP2_0_1.SecurityEventNotificationRequest, stationId: string) => Promise<SecurityEvent>; readByStationIdAndTimestamps: (tenantId: number, stationId: string, from?: Date, to?: Date) => Promise<SecurityEvent[]>; deleteByKey: (tenantId: number, key: string) => Promise<SecurityEvent | undefined>; } export interface ISubscriptionRepository extends CrudRepository<Subscription> { create(tenantId: number, value: Subscription): Promise<Subscription>; readAllByStationId(tenantId: number, stationId: string): Promise<Subscription[]>; deleteByKey(tenantId: number, key: string): Promise<Subscription | undefined>; } export interface ITransactionEventRepository extends CrudRepository<TransactionEvent> { createOrUpdateTransactionByTransactionEventAndStationId(tenantId: number, value: OCPP2_0_1.TransactionEventRequest, stationId: string): Promise<Transaction>; createMeterValue(tenantId: number, value: OCPP2_0_1.MeterValueType, transactionDatabaseId?: number | null, transactionId?: string | null, tariffId?: number | null): Promise<void>; createTransactionByStartTransaction(tenantId: number, request: OCPP1_6.StartTransactionRequest, stationId: string): Promise<Transaction>; updateTransactionByMeterValues(tenantId: number, meterValues: MeterValue[], stationId: string, transactionId: number): Promise<void>; readAllByStationIdAndTransactionId(tenantId: number, stationId: string, transactionId: string): Promise<TransactionEvent[]>; readTransactionByStationIdAndTransactionId(tenantId: number, stationId: string, transactionId: string): Promise<Transaction | undefined>; readAllTransactionsByStationIdAndEvseAndChargingStates(tenantId: number, stationId: string, evse: OCPP2_0_1.EVSEType, chargingStates?: OCPP2_0_1.ChargingStateEnumType[]): Promise<Transaction[]>; readAllActiveTransactionsByAuthorizationId(tenantId: number, authorizationId: number): Promise<Transaction[]>; readAllMeterValuesByTransactionDataBaseId(tenantId: number, transactionDataBaseId: number): Promise<MeterValue[]>; getActiveTransactionByStationIdAndEvseId(tenantId: number, stationId: string, evseId: number): Promise<Transaction | undefined>; updateTransactionTotalCostById(tenantId: number, totalCost: number, id: number): Promise<void>; createStopTransaction(tenantId: number, transactionDatabaseId: number, stationId: string, meterStop: number, timestamp: Date, meterValues: MeterValue[], reason?: string, idTokenDatabaseId?: number): Promise<StopTransaction>; updateTransactionByStationIdAndTransactionId(tenantId: number, transaction: Partial<Transaction>, transactionId: string, stationId: string): Promise<Transaction | undefined>; } export interface IVariableMonitoringRepository extends CrudRepository<OCPP2_0_1.VariableMonitoringType> { createOrUpdateByMonitoringDataTypeAndStationId(tenantId: number, value: OCPP2_0_1.MonitoringDataType, componentId: string, variableId: string, stationId: string): Promise<VariableMonitoring[]>; createOrUpdateBySetMonitoringDataTypeAndStationId(tenantId: number, value: OCPP2_0_1.SetMonitoringDataType, componentId: string, variableId: string, stationId: string): Promise<VariableMonitoring>; rejectAllVariableMonitoringsByStationId(tenantId: number, action: CallAction, stationId: string): Promise<void>; rejectVariableMonitoringByIdAndStationId(tenantId: number, action: CallAction, id: number, stationId: string): Promise<void>; updateResultByStationId(tenantId: number, result: OCPP2_0_1.SetMonitoringResultType, stationId: string): Promise<VariableMonitoring>; createEventDatumByComponentIdAndVariableIdAndStationId(tenantId: number, event: OCPP2_0_1.EventDataType, componentId: string, variableId: string, stationId: string): Promise<EventData>; } export interface IMessageInfoRepository extends CrudRepository<OCPP2_0_1.MessageInfoType> { deactivateAllByStationId(tenantId: number, stationId: string): Promise<void>; createOrUpdateByMessageInfoTypeAndStationId(tenantId: number, value: OCPP2_0_1.MessageInfoType, stationId: string, componentId?: number): Promise<MessageInfo>; } export interface ITariffRepository extends CrudRepository<Tariff> { findByStationId(tenantId: number, stationId: string): Promise<Tariff | undefined>; readAllByQuerystring(tenantId: number, query: TariffQueryString): Promise<Tariff[]>; deleteAllByQuerystring(tenantId: number, query: TariffQueryString): Promise<Tariff[]>; upsertTariff(tenantId: number, tariff: Tariff): Promise<Tariff>; } export interface ICertificateRepository extends CrudRepository<Certificate> { createOrUpdateCertificate(tenantId: number, certificate: Certificate): Promise<Certificate>; } export interface IInstalledCertificateRepository extends CrudRepository<InstalledCertificate> { } export interface IChargingProfileRepository extends CrudRepository<ChargingProfile> { createOrUpdateChargingProfile(tenantId: number, chargingProfile: OCPP2_0_1.ChargingProfileType, stationId: string, evseId?: number | null, chargingLimitSource?: OCPP2_0_1.ChargingLimitSourceEnumType, isActive?: boolean): Promise<ChargingProfile>; createChargingNeeds(tenantId: number, chargingNeeds: OCPP2_0_1.NotifyEVChargingNeedsRequest, stationId: string): Promise<ChargingNeeds>; findChargingNeedsByEvseDBIdAndTransactionDBId(tenantId: number, evseDBId: number, transactionDataBaseId: number): Promise<ChargingNeeds | undefined>; createCompositeSchedule(tenantId: number, compositeSchedule: OCPP2_0_1.CompositeScheduleType, stationId: string): Promise<CompositeSchedule>; getNextChargingProfileId(tenantId: number, stationId: string): Promise<number>; getNextChargingScheduleId(tenantId: number, stationId: string): Promise<number>; getNextStackLevel(tenantId: number, stationId: string, transactionDatabaseId: number | null, profilePurpose: OCPP2_0_1.ChargingProfilePurposeEnumType): Promise<number>; } export interface IReservationRepository extends CrudRepository<Reservation> { createOrUpdateReservation(tenantId: number, reserveNowRequest: OCPP2_0_1.ReserveNowRequest, stationId: string, isActive?: boolean): Promise<Reservation | undefined>; } export interface IOCPPMessageRepository extends CrudRepository<OCPPMessage> { } export interface IChargingStationSecurityInfoRepository extends CrudRepository<ChargingStationSecurityInfo> { readChargingStationPublicKeyFileId(tenantId: number, stationId: string): Promise<string>; readOrCreateChargingStationInfo(tenantId: number, stationId: string, publicKeyFileId: string): Promise<void>; } export interface IChargingStationSequenceRepository extends CrudRepository<ChargingStationSequence> { getNextSequenceValue(tenantId: number, stationId: string, type: ChargingStationSequenceTypeEnumType): Promise<number>; } export interface IServerNetworkProfileRepository extends CrudRepository<ServerNetworkProfile> { upsertServerNetworkProfile(websocketServerConfig: any, maxCallLengthSeconds: number): Promise<ServerNetworkProfile>; } export interface IChangeConfigurationRepository extends CrudRepository<ChangeConfiguration> { createOrUpdateChangeConfiguration(tenantId: number, configuration: ChangeConfiguration): Promise<ChangeConfiguration | undefined>; } export interface ITenantRepository extends CrudRepository<Tenant> { createTenant(tenant: Tenant): Promise<Tenant>; }