import { defineConfig } from '@mikro-orm/sqlite'
-import { PerformanceData, PerformanceRecord } from './src/types/index.js'
import { Constants } from './src/utils/index.js'
export default defineConfig({
dbName: `${Constants.DEFAULT_PERFORMANCE_RECORDS_DB_NAME}.db`,
- entities: [PerformanceRecord, PerformanceData],
+ entities: ['./dist/types/orm/entities/*.js'],
+ entitiesTs: ['./src/types/orm/entities/*.ts'],
debug: true
})
// Copyright Jerome Benoit. 2021-2024. All Rights Reserved.
-import { type Configuration, MikroORM, type Options } from '@mikro-orm/core'
-import { TsMorphMetadataProvider } from '@mikro-orm/reflection'
+import { MikroORM as MariaDbORM, type Options as MariaDbOptions } from '@mikro-orm/mariadb'
+import { MikroORM as SqliteORM, type Options as SqliteOptions } from '@mikro-orm/sqlite'
import { Storage } from './Storage.js'
-import {
- type MikroOrmDbType,
- PerformanceData,
- PerformanceRecord,
- type Statistics,
- StorageType
-} from '../../types/index.js'
+import { type Statistics, StorageType } from '../../types/index.js'
import { Constants } from '../../utils/index.js'
export class MikroOrmStorage extends Storage {
private readonly storageType: StorageType
- private orm?: MikroORM
+ private orm?: SqliteORM | MariaDbORM
constructor (storageUri: string, logPrefix: string, storageType: StorageType) {
super(storageUri, logPrefix)
public async storePerformanceStatistics (performanceStatistics: Statistics): Promise<void> {
try {
- const performanceRecord = new PerformanceRecord()
- await this.orm?.em.persistAndFlush(performanceRecord)
+ // TODO: build PerformanceRecord entity
+ await this.orm?.em.persistAndFlush({})
} catch (error) {
this.handleDBError(this.storageType, error as Error, Constants.PERFORMANCE_RECORDS_TABLE)
}
public async open (): Promise<void> {
try {
if (this.orm == null) {
- this.orm = await MikroORM.init(this.getOptions(), true)
+ switch (this.storageType) {
+ case StorageType.SQLITE:
+ this.orm = await SqliteORM.init(this.getOptions() as SqliteOptions)
+ break
+ case StorageType.MARIA_DB:
+ case StorageType.MYSQL:
+ this.orm = await MariaDbORM.init(this.getOptions() as MariaDbOptions)
+ break
+ }
}
} catch (error) {
this.handleDBError(this.storageType, error as Error)
return this.storageUri.pathname.replace(/(?:^\/)|(?:\/$)/g, '')
}
- private getOptions (): Configuration | Options {
+ private getOptions (): SqliteOptions | MariaDbOptions {
return {
- metadataProvider: TsMorphMetadataProvider,
- entities: [PerformanceRecord, PerformanceData],
- type: this.storageType as MikroOrmDbType,
+ dbName: this.dbName,
+ entities: ['./dist/types/orm/entities/*.js'],
+ entitiesTs: ['./src/types/orm/entities/*.ts'],
clientUrl: this.getClientUrl()
}
}
} from './ocpp/Configuration.js'
export type { ConnectorStatus } from './ConnectorStatus.js'
export { ConnectorStatusEnum, type ConnectorStatusTransition } from './ocpp/ConnectorStatusEnum.js'
-export { DBName, type MikroOrmDbType, StorageType } from './Storage.js'
+export { DBName, StorageType } from './Storage.js'
export type { EmptyObject } from './EmptyObject.js'
export { ErrorType } from './ocpp/ErrorType.js'
export type { EvseTemplate, EvseStatus } from './Evse.js'
} from 'date-fns'
import { Constants } from './Constants.js'
-import { type TimestampedData, WebSocketCloseEventStatusString } from '../types/index.js'
+import {
+ type EmptyObject,
+ type TimestampedData,
+ WebSocketCloseEventStatusString
+} from '../types/index.js'
export const logPrefix = (prefixString = ''): string => {
return `${new Date().toLocaleString()}${prefixString}`
return value != null && typeof value === 'object' && !Array.isArray(value)
}
-export const isEmptyObject = (object: object): object is Record<string, never> => {
+export const isEmptyObject = (object: object): object is EmptyObject => {
if (object.constructor !== Object) {
return false
}