X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fperformance%2Fstorage%2FMongoDBStorage.ts;h=c3c98022d4204c63aa6d940f7cac887d2424ed58;hb=a94f567f2d7cefba06e74fa0a957c096cf581b88;hp=3e1abd2bb59da44ae1ddff32ac4e1a0b3d297278;hpb=5edd8ba0f8978cfb3ca9d80f299d9748c6c5970e;p=e-mobility-charging-stations-simulator.git diff --git a/src/performance/storage/MongoDBStorage.ts b/src/performance/storage/MongoDBStorage.ts index 3e1abd2b..c3c98022 100644 --- a/src/performance/storage/MongoDBStorage.ts +++ b/src/performance/storage/MongoDBStorage.ts @@ -1,73 +1,73 @@ -// Copyright Jerome Benoit. 2021-2023. All Rights Reserved. +// Copyright Jerome Benoit. 2021-2024. All Rights Reserved. -import { MongoClient } from 'mongodb'; +import { MongoClient } from 'mongodb' -import { Storage } from './Storage'; -import { BaseError } from '../../exception'; -import { type Statistics, StorageType } from '../../types'; -import { Constants } from '../../utils'; +import { BaseError } from '../../exception/index.js' +import { type Statistics, StorageType } from '../../types/index.js' +import { Constants } from '../../utils/index.js' +import { Storage } from './Storage.js' export class MongoDBStorage extends Storage { - private readonly client: MongoClient | null; - private connected: boolean; + private readonly client?: MongoClient + private connected: boolean - constructor(storageUri: string, logPrefix: string) { - super(storageUri, logPrefix); - this.client = new MongoClient(this.storageUri.toString()); - this.connected = false; - this.dbName = - this.storageUri.pathname.replace(/(?:^\/)|(?:\/$)/g, '') ?? - Constants.DEFAULT_PERFORMANCE_RECORDS_DB_NAME; + constructor (storageUri: string, logPrefix: string) { + super(storageUri, logPrefix) + this.client = new MongoClient(this.storageUri.toString()) + this.connected = false + this.dbName = this.storageUri.pathname.replace(/(?:^\/)|(?:\/$)/g, '') } - public async storePerformanceStatistics(performanceStatistics: Statistics): Promise { + public async storePerformanceStatistics (performanceStatistics: Statistics): Promise { try { - this.checkDBConnection(); + this.setPerformanceStatistics(performanceStatistics) + this.checkDBConnection() await this.client ?.db(this.dbName) .collection(Constants.PERFORMANCE_RECORDS_TABLE) - .insertOne(performanceStatistics); + .replaceOne({ id: performanceStatistics.id }, performanceStatistics, { upsert: true }) } catch (error) { - this.handleDBError(StorageType.MONGO_DB, error as Error, Constants.PERFORMANCE_RECORDS_TABLE); + this.handleDBError(StorageType.MONGO_DB, error as Error, Constants.PERFORMANCE_RECORDS_TABLE) } } - public async open(): Promise { + public async open (): Promise { try { - if (!this.connected && this?.client) { - await this.client.connect(); - this.connected = true; + if (!this.connected && this.client != null) { + await this.client.connect() + this.connected = true } } catch (error) { - this.handleDBError(StorageType.MONGO_DB, error as Error); + this.handleDBError(StorageType.MONGO_DB, error as Error) } } - public async close(): Promise { + public async close (): Promise { + this.clearPerformanceStatistics() try { - if (this.connected && this?.client) { - await this.client.close(); - this.connected = false; + if (this.connected && this.client != null) { + await this.client.close() + this.connected = false } } catch (error) { - this.handleDBError(StorageType.MONGO_DB, error as Error); + this.handleDBError(StorageType.MONGO_DB, error as Error) } } - private checkDBConnection() { - if (!this?.client) { + private checkDBConnection (): void { + if (this.client == null) { throw new BaseError( `${this.logPrefix} ${this.getDBNameFromStorageType( - StorageType.MONGO_DB, - )} client initialization failed while trying to issue a request`, - ); + StorageType.MONGO_DB + )} client initialization failed while trying to issue a request` + ) } if (!this.connected) { throw new BaseError( `${this.logPrefix} ${this.getDBNameFromStorageType( - StorageType.MONGO_DB, - )} connection not opened while trying to issue a request`, - ); + StorageType.MONGO_DB + )} connection not opened while trying to issue a request` + ) } } }