X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fperformance%2Fstorage%2FMongoDBStorage.ts;h=568f70953edc4a2a6db290dae0e51a1634e7cb68;hb=248f70eff6b955b177f0bbd9ca84356c3b99d72e;hp=6bc43bbb8d16e15850aceda9a9b503cd6e1af00b;hpb=1f5df42ad17d09d3a1f53f6618eba325a403d7ad;p=e-mobility-charging-stations-simulator.git diff --git a/src/performance/storage/MongoDBStorage.ts b/src/performance/storage/MongoDBStorage.ts index 6bc43bbb..568f7095 100644 --- a/src/performance/storage/MongoDBStorage.ts +++ b/src/performance/storage/MongoDBStorage.ts @@ -1,26 +1,32 @@ -// Copyright Jerome Benoit. 2021. All Rights Reserved. +// Copyright Jerome Benoit. 2021-2023. All Rights Reserved. -import Constants from '../../utils/Constants'; import { MongoClient } from 'mongodb'; -import Statistics from '../../types/Statistics'; + import { Storage } from './Storage'; -import { StorageType } from '../../types/Storage'; +import { BaseError } from '../../exception'; +import { type Statistics, StorageType } from '../../types'; +import { Constants } from '../../utils'; export class MongoDBStorage extends Storage { - private readonly client: MongoClient | null; + 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; + this.dbName = + this.storageUri.pathname.replace(/(?:^\/)|(?:\/$)/g, '') ?? + Constants.DEFAULT_PERFORMANCE_RECORDS_DB_NAME; } public async storePerformanceStatistics(performanceStatistics: Statistics): Promise { try { this.checkDBConnection(); - await this.client.db(this.dbName).collection(Constants.PERFORMANCE_RECORDS_TABLE).insertOne(performanceStatistics); + await this.client + ?.db(this.dbName) + .collection(Constants.PERFORMANCE_RECORDS_TABLE) + .replaceOne({ id: performanceStatistics.id }, performanceStatistics, { upsert: true }); } catch (error) { this.handleDBError(StorageType.MONGO_DB, error as Error, Constants.PERFORMANCE_RECORDS_TABLE); } @@ -50,10 +56,18 @@ export class MongoDBStorage extends Storage { private checkDBConnection() { if (!this?.client) { - throw new Error(`${this.logPrefix} ${this.getDBNameFromStorageType(StorageType.MONGO_DB)} client initialization failed while trying to issue a request`); + throw new BaseError( + `${this.logPrefix} ${this.getDBNameFromStorageType( + StorageType.MONGO_DB, + )} client initialization failed while trying to issue a request`, + ); } if (!this.connected) { - throw new Error(`${this.logPrefix} ${this.getDBNameFromStorageType(StorageType.MONGO_DB)} connection not opened while trying to issue a request`); + throw new BaseError( + `${this.logPrefix} ${this.getDBNameFromStorageType( + StorageType.MONGO_DB, + )} connection not opened while trying to issue a request`, + ); } } }