-// 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) {
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);
}
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`,
);
}
}