Run sonar cloud with current node.js LTS version
[e-mobility-charging-stations-simulator.git] / src / performance / storage / MikroORMStorage.ts
index 96740a8f4564204d2180bebb4b228c7313404861..6c9e63d8da96b87452bfdbc6330d79c725347514 100644 (file)
@@ -12,7 +12,7 @@ import { TsMorphMetadataProvider } from '@mikro-orm/reflection';
 
 export class MikroORMStorage extends Storage {
   private storageType: StorageType;
-  private orm: MikroORM;
+  private orm: MikroORM | null;
 
   constructor(storageURI: string, logPrefix: string, storageType: StorageType) {
     super(storageURI, logPrefix);
@@ -25,16 +25,29 @@ export class MikroORMStorage extends Storage {
       const performanceRecord = new PerformanceRecord();
       await this.orm.em.persistAndFlush(performanceRecord);
     } catch (error) {
-      this.handleDBError(this.storageType, error, Constants.PERFORMANCE_RECORDS_TABLE);
+      this.handleDBError(this.storageType, error as Error, Constants.PERFORMANCE_RECORDS_TABLE);
     }
   }
 
   public async open(): Promise<void> {
-    this.orm = await MikroORM.init(this.getOptions(), true);
+    try {
+      if (!this?.orm) {
+        this.orm = await MikroORM.init(this.getOptions(), true);
+      }
+    } catch (error) {
+      this.handleDBError(this.storageType, error as Error);
+    }
   }
 
   public async close(): Promise<void> {
-    await this.orm.close();
+    try {
+      if (this?.orm) {
+        await this.orm.close();
+        this.orm = null;
+      }
+    } catch (error) {
+      this.handleDBError(this.storageType, error as Error);
+    }
   }
 
   private getDBName(): string {