import type { BootConfig, CallAction, ChargingLimitSourceEnumType, ChargingProfilePurposeEnumType, ChargingStationSequenceTypeEnumType, CrudRepository, MeterValueDto, OCPP1_6, OCPP2_0_1, OCPPMessageDto, OCPPVersion } from '@citrineos/base'; import type { ChargingProfileInput, CompositeScheduleInput } from '../layers/sequelize/mapper/2.0.1/ChargingProfileMapper.js'; 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, DeleteCertificateAttempt, EvseType, InstallCertificateAttempt, 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 { readAllByQuerystring: (tenantId: number, query: AuthorizationQuerystring) => Promise; readOnlyOneByQuerystring: (tenantId: number, query: AuthorizationQuerystring) => Promise; } /** * Key is StationId */ export interface IBootRepository extends CrudRepository { createOrUpdateByKey: (tenantId: number, value: BootConfig, key: string) => Promise; updateStatusByKey: (tenantId: number, status: OCPP2_0_1.RegistrationStatusEnumType, statusInfo: OCPP2_0_1.StatusInfoType | undefined, key: string) => Promise; updateLastBootTimeByKey: (tenantId: number, lastBootTime: string, key: string) => Promise; readByKey: (tenantId: number, key: string) => Promise; existsByKey: (tenantId: number, key: string) => Promise; deleteByKey: (tenantId: number, key: string) => Promise; } export interface IDeviceModelRepository extends CrudRepository { createOrUpdateDeviceModelByStationId(tenantId: number, value: OCPP2_0_1.ReportDataType, stationId: string, isoTimestamp: string): Promise; createOrUpdateByGetVariablesResultAndStationId(tenantId: number, getVariablesResult: OCPP2_0_1.GetVariableResultType[], stationId: string, isoTimestamp: string): Promise; createOrUpdateBySetVariablesDataAndStationId(tenantId: number, setVariablesData: OCPP2_0_1.SetVariableDataType[], stationId: string, isoTimestamp: string): Promise; updateResultByStationId(tenantId: number, result: OCPP2_0_1.SetVariableResultType, stationId: string, isoTimestamp: string): Promise; readAllSetVariableByStationId(tenantId: number, stationId: string): Promise; readAllByQuerystring(tenantId: number, query: VariableAttributeQuerystring): Promise; existByQuerystring(tenantId: number, query: VariableAttributeQuerystring): Promise; deleteAllByQuerystring(tenantId: number, query: VariableAttributeQuerystring): Promise; 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; findEvseByIdAndConnectorId(tenantId: number, id: number, connectorId: number | null): Promise; findVariableCharacteristicsByVariableNameAndVariableInstance(tenantId: number, variableName: string, variableInstance: string | null): Promise; } export interface ILocalAuthListRepository extends CrudRepository { /** * 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; /** * 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; getSendLocalListRequestByStationIdAndCorrelationId(tenantId: number, stationId: string, correlationId: string): Promise; /** * 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; } export interface ILocationRepository extends CrudRepository { readLocationById: (tenantId: number, id: number) => Promise; readChargingStationByStationId: (tenantId: number, stationId: string) => Promise; readConnectorByStationIdAndOcpp16ConnectorId: (tenantId: number, stationId: string, ocpp16ConnectorId: number) => Promise; readEvseByStationIdAndOcpp201EvseId: (tenantId: number, stationId: string, ocpp201EvseId: number) => Promise; readConnectorByStationIdAndOcpp201EvseType: (tenantId: number, stationId: string, ocpp201EvseType: OCPP2_0_1.EVSEType) => Promise; setChargingStationIsOnlineAndOCPPVersion: (tenantId: number, stationId: string, isOnline: boolean, ocppVersion: OCPPVersion | null) => Promise; doesChargingStationExistByStationId: (tenantId: number, stationId: string) => Promise; addStatusNotificationToChargingStation(tenantId: number, stationId: string, statusNotification: StatusNotification): Promise; createOrUpdateChargingStation(tenantId: number, chargingStation: ChargingStation): Promise; createOrUpdateConnector(tenantId: number, connector: Connector): Promise; updateAllConnectorsByQuery(tenantId: number, value: Partial, query: object): Promise; updateChargingStationTimestamp(tenantId: number, stationId: string, timestamp: string): Promise; } export interface ISecurityEventRepository extends CrudRepository { createByStationId: (tenantId: number, value: OCPP2_0_1.SecurityEventNotificationRequest, stationId: string) => Promise; readByStationIdAndTimestamps: (tenantId: number, stationId: string, from?: Date, to?: Date) => Promise; deleteByKey: (tenantId: number, key: string) => Promise; } export interface ISubscriptionRepository extends CrudRepository { create(tenantId: number, value: Subscription): Promise; readAllByStationId(tenantId: number, stationId: string): Promise; deleteByKey(tenantId: number, key: string): Promise; } export interface ITransactionEventRepository extends CrudRepository { createOrUpdateTransactionByTransactionEventAndStationId(tenantId: number, value: OCPP2_0_1.TransactionEventRequest, stationId: string): Promise; createMeterValue(tenantId: number, value: OCPP2_0_1.MeterValueType, transactionDatabaseId?: number | null, transactionId?: string | null, tariffId?: number | null): Promise; createTransactionByStartTransaction(tenantId: number, request: OCPP1_6.StartTransactionRequest, stationId: string): Promise; updateTransactionByMeterValues(tenantId: number, meterValues: MeterValueDto[], stationId: string, transactionId: number): Promise; readAllByStationIdAndTransactionId(tenantId: number, stationId: string, transactionId: string): Promise; readTransactionByStationIdAndTransactionId(tenantId: number, stationId: string, transactionId: string): Promise; readAllTransactionsByStationIdAndEvseAndChargingStates(tenantId: number, stationId: string, evse: OCPP2_0_1.EVSEType, chargingStates?: OCPP2_0_1.ChargingStateEnumType[]): Promise; readAllActiveTransactionsByAuthorizationId(tenantId: number, authorizationId: number): Promise; readAllMeterValuesByTransactionDataBaseId(tenantId: number, transactionDataBaseId: number): Promise; getActiveTransactionByStationIdAndEvseId(tenantId: number, stationId: string, evseId: number): Promise; updateTransactionTotalCostById(tenantId: number, totalCost: number, id: number): Promise; createStopTransaction(tenantId: number, transactionDatabaseId: number, stationId: string, meterStop: number, timestamp: Date, meterValues: MeterValueDto[], reason?: string, idTokenDatabaseId?: number): Promise; updateTransactionByStationIdAndTransactionId(tenantId: number, transaction: Partial, transactionId: string, stationId: string): Promise; deactivateActiveTransactionsByStationIdAndEvseId(tenantId: number, stationId: string, evseId: number, excludeTransactionId: string): Promise; } export interface IVariableMonitoringRepository extends CrudRepository { createOrUpdateByMonitoringDataTypeAndStationId(tenantId: number, value: OCPP2_0_1.MonitoringDataType, componentId: string, variableId: string, stationId: string): Promise; createOrUpdateBySetMonitoringDataTypeAndStationId(tenantId: number, value: OCPP2_0_1.SetMonitoringDataType, componentId: string, variableId: string, stationId: string): Promise; rejectAllVariableMonitoringsByStationId(tenantId: number, action: CallAction, stationId: string): Promise; rejectVariableMonitoringByIdAndStationId(tenantId: number, action: CallAction, id: number, stationId: string): Promise; updateResultByStationId(tenantId: number, result: OCPP2_0_1.SetMonitoringResultType, stationId: string): Promise; createEventDatumByComponentIdAndVariableIdAndStationId(tenantId: number, event: OCPP2_0_1.EventDataType, componentId: string, variableId: string, stationId: string): Promise; } export interface IMessageInfoRepository extends CrudRepository { deactivateAllByStationId(tenantId: number, stationId: string): Promise; createOrUpdateByMessageInfoTypeAndStationId(tenantId: number, value: OCPP2_0_1.MessageInfoType, stationId: string, componentId?: number): Promise; } export interface ITariffRepository extends CrudRepository { findByConnectorId(tenantId: number, connectorId: number): Promise; readAllByQuerystring(tenantId: number, query: TariffQueryString): Promise; deleteAllByQuerystring(tenantId: number, query: TariffQueryString): Promise; upsertTariff(tenantId: number, tariff: Tariff): Promise; } export interface ICertificateRepository extends CrudRepository { createOrUpdateCertificate(tenantId: number, certificate: Certificate): Promise; } export interface IInstalledCertificateRepository extends CrudRepository { } export interface IInstallCertificateAttemptRepository extends CrudRepository { } export interface IDeleteCertificateAttemptRepository extends CrudRepository { } export interface IChargingProfileRepository extends CrudRepository { createOrUpdateChargingProfile(tenantId: number, chargingProfile: ChargingProfileInput, stationId: string, evseId?: number | null, chargingLimitSource?: ChargingLimitSourceEnumType, isActive?: boolean): Promise; createChargingNeeds(tenantId: number, chargingNeeds: OCPP2_0_1.NotifyEVChargingNeedsRequest, stationId: string): Promise; findChargingNeedsByEvseDBIdAndTransactionDBId(tenantId: number, evseDBId: number, transactionDataBaseId: number): Promise; createCompositeSchedule(tenantId: number, compositeSchedule: CompositeScheduleInput, stationId: string): Promise; getNextChargingProfileId(tenantId: number, stationId: string): Promise; getNextChargingScheduleId(tenantId: number, stationId: string): Promise; getNextStackLevel(tenantId: number, stationId: string, transactionDatabaseId: number | null, profilePurpose: ChargingProfilePurposeEnumType): Promise; } export interface IReservationRepository extends CrudRepository { createOrUpdateReservation(tenantId: number, reserveNowRequest: OCPP2_0_1.ReserveNowRequest, stationId: string, isActive?: boolean): Promise; } export interface IOCPPMessageRepository extends CrudRepository { createOCPPMessage(tenantId: number, message: OCPPMessageDto): Promise; getRequestByCorrelationId(tenantId: number, correlationId: string): Promise; } export interface IChargingStationSecurityInfoRepository extends CrudRepository { readChargingStationPublicKeyFileId(tenantId: number, stationId: string): Promise; readOrCreateChargingStationInfo(tenantId: number, stationId: string, publicKeyFileId: string): Promise; } export interface IChargingStationSequenceRepository extends CrudRepository { getNextSequenceValue(tenantId: number, stationId: string, type: ChargingStationSequenceTypeEnumType): Promise; } export interface IServerNetworkProfileRepository extends CrudRepository { upsertServerNetworkProfile(websocketServerConfig: any, maxCallLengthSeconds: number): Promise; } export interface IChangeConfigurationRepository extends CrudRepository { createOrUpdateChangeConfiguration(tenantId: number, configuration: ChangeConfiguration): Promise; } export interface ITenantRepository extends CrudRepository { createTenant(tenant: Tenant): Promise; }