Merge pull request #813 from SAP/combined-prs-branch
[e-mobility-charging-stations-simulator.git] / src / performance / storage / MongoDBStorage.ts
index 711799083d28f1f36e775f3f83d8910b4eb3fb72..568f70953edc4a2a6db290dae0e51a1634e7cb68 100644 (file)
@@ -1,14 +1,14 @@
-// Copyright Jerome Benoit. 2021. All Rights Reserved.
+// Copyright Jerome Benoit. 2021-2023. All Rights Reserved.
 
 import { MongoClient } from 'mongodb';
 
-import type { Statistics } from '../../types/Statistics';
-import { StorageType } from '../../types/Storage';
-import Constants from '../../utils/Constants';
 import { Storage } from './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) {
@@ -24,9 +24,9 @@ export class MongoDBStorage extends Storage {
     try {
       this.checkDBConnection();
       await this.client
-        .db(this.dbName)
+        ?.db(this.dbName)
         .collection<Statistics>(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);
     }
@@ -56,17 +56,17 @@ export class MongoDBStorage extends Storage {
 
   private checkDBConnection() {
     if (!this?.client) {
-      throw new Error(
+      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 Error(
+      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`,
       );
     }
   }