Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
import { defineConfig } from '@mikro-orm/sqlite'
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`,
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'],
// Copyright Jerome Benoit. 2021-2024. All Rights Reserved.
// 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 { 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
import { Constants } from '../../utils/index.js'
export class MikroOrmStorage extends Storage {
private readonly storageType: StorageType
+ private orm?: SqliteORM | MariaDbORM
constructor (storageUri: string, logPrefix: string, storageType: StorageType) {
super(storageUri, logPrefix)
constructor (storageUri: string, logPrefix: string, storageType: StorageType) {
super(storageUri, logPrefix)
public async storePerformanceStatistics (performanceStatistics: Statistics): Promise<void> {
try {
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)
}
} catch (error) {
this.handleDBError(this.storageType, error as Error, Constants.PERFORMANCE_RECORDS_TABLE)
}
public async open (): Promise<void> {
try {
if (this.orm == null) {
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)
}
} catch (error) {
this.handleDBError(this.storageType, error as Error)
return this.storageUri.pathname.replace(/(?:^\/)|(?:\/$)/g, '')
}
return this.storageUri.pathname.replace(/(?:^\/)|(?:\/$)/g, '')
}
- private getOptions (): Configuration | Options {
+ private getOptions (): SqliteOptions | MariaDbOptions {
- 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()
}
}
clientUrl: this.getClientUrl()
}
}
protected getDBNameFromStorageType (type: StorageType): DBName | undefined {
switch (type) {
protected getDBNameFromStorageType (type: StorageType): DBName | undefined {
switch (type) {
+ case StorageType.SQLITE:
+ return DBName.SQLITE
case StorageType.MARIA_DB:
return DBName.MARIA_DB
case StorageType.MARIA_DB:
return DBName.MARIA_DB
- case StorageType.MONGO_DB:
- return DBName.MONGO_DB
case StorageType.MYSQL:
return DBName.MYSQL
case StorageType.MYSQL:
return DBName.MYSQL
- case StorageType.SQLITE:
- return DBName.SQLITE
+ case StorageType.MONGO_DB:
+ return DBName.MONGO_DB
case StorageType.MONGO_DB:
storageInstance = new MongoDBStorage(connectionUri, logPrefix)
break
case StorageType.MONGO_DB:
storageInstance = new MongoDBStorage(connectionUri, logPrefix)
break
+ // case StorageType.SQLITE:
// case StorageType.MYSQL:
// case StorageType.MARIA_DB:
// case StorageType.MYSQL:
// case StorageType.MARIA_DB:
- // case StorageType.SQLITE:
// storageInstance = new MikroOrmStorage(connectionUri, logPrefix, type)
// break
default:
// storageInstance = new MikroOrmStorage(connectionUri, logPrefix, type)
// break
default:
-import type { Configuration } from '@mikro-orm/core'
-
-export type MikroOrmDbType = keyof typeof Configuration.PLATFORMS
-
export enum StorageType {
JSON_FILE = 'jsonfile',
MONGO_DB = 'mongodb',
export enum StorageType {
JSON_FILE = 'jsonfile',
MONGO_DB = 'mongodb',
} from './ocpp/Configuration.js'
export type { ConnectorStatus } from './ConnectorStatus.js'
export { ConnectorStatusEnum, type ConnectorStatusTransition } from './ocpp/ConnectorStatusEnum.js'
} 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'
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'
} 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}`
export const logPrefix = (prefixString = ''): string => {
return `${new Date().toLocaleString()}${prefixString}`
return value != null && typeof value === 'object' && !Array.isArray(value)
}
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
}
if (object.constructor !== Object) {
return false
}