refactor: rename Storage.handleDBError -> Storage.handleDBStorageError
[e-mobility-charging-stations-simulator.git] / src / performance / storage / MongoDBStorage.ts
index 70256fc953d358e215f5ee9124d0997314fe3e8a..982e55bf682800ba02da10dc717bf6dea08fa736 100644 (file)
@@ -1,11 +1,11 @@
-// Copyright Jerome Benoit. 2021-2023. All Rights Reserved.
+// Copyright Jerome Benoit. 2021-2024. All Rights Reserved.
 
 import { MongoClient } from 'mongodb'
 
-import { Storage } from './Storage.js'
 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
@@ -15,47 +15,53 @@ export class MongoDBStorage extends Storage {
     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, '')
   }
 
   public async storePerformanceStatistics (performanceStatistics: Statistics): Promise<void> {
     try {
+      this.setPerformanceStatistics(performanceStatistics)
       this.checkDBConnection()
       await this.client
         ?.db(this.dbName)
         .collection<Statistics>(Constants.PERFORMANCE_RECORDS_TABLE)
-        .replaceOne({ id: performanceStatistics.id }, performanceStatistics, { upsert: true })
+        .replaceOne({ id: performanceStatistics.id }, performanceStatistics, {
+          upsert: true
+        })
     } catch (error) {
-      this.handleDBError(StorageType.MONGO_DB, error as Error, Constants.PERFORMANCE_RECORDS_TABLE)
+      this.handleDBStorageError(
+        StorageType.MONGO_DB,
+        error as Error,
+        Constants.PERFORMANCE_RECORDS_TABLE
+      )
     }
   }
 
   public async open (): Promise<void> {
     try {
-      if (!this.connected && this?.client != null) {
+      if (!this.connected && this.client != null) {
         await this.client.connect()
         this.connected = true
       }
     } catch (error) {
-      this.handleDBError(StorageType.MONGO_DB, error as Error)
+      this.handleDBStorageError(StorageType.MONGO_DB, error as Error)
     }
   }
 
   public async close (): Promise<void> {
+    this.clearPerformanceStatistics()
     try {
-      if (this.connected && this?.client != null) {
+      if (this.connected && this.client != null) {
         await this.client.close()
         this.connected = false
       }
     } catch (error) {
-      this.handleDBError(StorageType.MONGO_DB, error as Error)
+      this.handleDBStorageError(StorageType.MONGO_DB, error as Error)
     }
   }
 
   private checkDBConnection (): void {
-    if (this?.client == null) {
+    if (this.client == null) {
       throw new BaseError(
         `${this.logPrefix} ${this.getDBNameFromStorageType(
           StorageType.MONGO_DB