Refine TS and linter configuration
[e-mobility-charging-stations-simulator.git] / src / performance / storage / Storage.ts
index ff299fac5319f2d2fdb0ea9599c2cd72f6cf0af8..d85d8c415efdd1b254694976597bfd722af4c42d 100644 (file)
@@ -1,24 +1,41 @@
 // Copyright Jerome Benoit. 2021. All Rights Reserved.
 
-import { DBName, StorageType } from '../../types/Storage';
-
-import Statistics from '../../types/Statistics';
 import { URL } from 'url';
-import Utils from '../../utils/Utils';
+
+import type { EmptyObject } from '../../types/EmptyObject';
+import type { HandleErrorParams } from '../../types/Error';
+import type Statistics from '../../types/Statistics';
+import { DBName, StorageType } from '../../types/Storage';
 import logger from '../../utils/Logger';
+import Utils from '../../utils/Utils';
 
 export abstract class Storage {
-  protected readonly storageURI: URL;
+  protected readonly storageUri: URL;
   protected readonly logPrefix: string;
   protected dbName: string;
 
-  constructor(storageURI: string, logPrefix: string) {
-    this.storageURI = new URL(storageURI);
+  constructor(storageUri: string, logPrefix: string) {
+    this.storageUri = new URL(storageUri);
     this.logPrefix = logPrefix;
   }
 
-  protected handleDBError(type: StorageType, error: Error, table?: string): void {
-    logger.error(`${this.logPrefix} ${this.getDBNameFromStorageType(type)} error '${error.message}'${(!Utils.isNullOrUndefined(table) || !table) && ` in table or collection '${table}'`}: %j`, error);
+  protected handleDBError(
+    type: StorageType,
+    error: Error,
+    table?: string,
+    params: HandleErrorParams<EmptyObject> = { throwError: false }
+  ): void {
+    const inTableOrCollectionStr =
+      (!Utils.isNullOrUndefined(table) || !table) && ` in table or collection '${table}'`;
+    logger.error(
+      `${this.logPrefix} ${this.getDBNameFromStorageType(type)} error '${
+        error.message
+      }'${inTableOrCollectionStr}:`,
+      error
+    );
+    if (params?.throwError) {
+      throw error;
+    }
   }
 
   protected getDBNameFromStorageType(type: StorageType): DBName {
@@ -36,5 +53,7 @@ export abstract class Storage {
 
   public abstract open(): void | Promise<void>;
   public abstract close(): void | Promise<void>;
-  public abstract storePerformanceStatistics(performanceStatistics: Statistics): void | Promise<void>;
+  public abstract storePerformanceStatistics(
+    performanceStatistics: Statistics
+  ): void | Promise<void>;
 }