X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fperformance%2Fstorage%2FMikroOrmStorage.ts;h=9746c6bd5f5a09b439129338fc1dde2a1a82a013;hb=789007bd09242370a9d3502da967deb414886504;hp=3eec553d26a56c013d9df95c6b30c9f7e43a310e;hpb=5199f9fdf202eb534948f165a0994e1993675aa8;p=e-mobility-charging-stations-simulator.git diff --git a/src/performance/storage/MikroOrmStorage.ts b/src/performance/storage/MikroOrmStorage.ts index 3eec553d..9746c6bd 100644 --- a/src/performance/storage/MikroOrmStorage.ts +++ b/src/performance/storage/MikroOrmStorage.ts @@ -1,21 +1,15 @@ -// Copyright Jerome Benoit. 2021-2023. 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 { - type MikroOrmDbType, - PerformanceData, - PerformanceRecord, - type Statistics, - StorageType -} from '../../types/index.js' +import { type PerformanceRecord, 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) @@ -25,8 +19,13 @@ export class MikroOrmStorage extends Storage { public async storePerformanceStatistics (performanceStatistics: Statistics): Promise { try { - const performanceRecord = new PerformanceRecord() - await this.orm?.em.persistAndFlush(performanceRecord) + await this.orm?.em.persistAndFlush({ + ...performanceStatistics, + statisticsData: Array.from(performanceStatistics.statisticsData, ([name, value]) => ({ + name, + ...value + })) + } satisfies PerformanceRecord) } catch (error) { this.handleDBError(this.storageType, error as Error, Constants.PERFORMANCE_RECORDS_TABLE) } @@ -35,7 +34,15 @@ export class MikroOrmStorage extends Storage { public async open (): Promise { 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) @@ -55,16 +62,16 @@ export class MikroOrmStorage extends Storage { private getDBName (): string { if (this.storageType === StorageType.SQLITE) { - return `${Constants.DEFAULT_PERFORMANCE_RECORDS_DB_NAME}.db` + return `${Constants.DEFAULT_PERFORMANCE_DIRECTORY}/${Constants.DEFAULT_PERFORMANCE_RECORDS_DB_NAME}.db` } 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() } }