62 lines
2.3 KiB
TypeScript
62 lines
2.3 KiB
TypeScript
import { MongoClient, Db } from 'mongodb';
|
|
import _, { difference } from 'lodash';
|
|
import { differenceBetweenObject } from '@seed/helpers/Utils';
|
|
|
|
export const createSetRequest = <T>(field: string, data: object, oldObject?: any): Partial<T> => {
|
|
let dataToChange;
|
|
if (oldObject) dataToChange = differenceBetweenObject(data, oldObject);
|
|
else dataToChange = data;
|
|
|
|
const req: any = {};
|
|
for (const key in dataToChange) {
|
|
if (dataToChange.hasOwnProperty(key)) {
|
|
if (_.isPlainObject(dataToChange[key])) {
|
|
if (field != '') req[`${field}.${key}`] = createSetRequest(key, dataToChange[key]);
|
|
else req[`${key}`] = createSetRequest('', dataToChange[key]);
|
|
} else {
|
|
if (field != '') req[`${field}.${key}`] = dataToChange[key];
|
|
else req[`${key}`] = dataToChange[key];
|
|
}
|
|
}
|
|
}
|
|
|
|
return req;
|
|
};
|
|
|
|
export default class DB {
|
|
private static instance: DB;
|
|
public mongoClient!: MongoClient;
|
|
public db!: Db;
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
private constructor() {}
|
|
|
|
public static async getInstance(): Promise<DB> {
|
|
if (!this.instance || !this.instance.mongoClient || !this.instance.mongoClient.isConnected) {
|
|
this.instance = new DB();
|
|
|
|
let mongoUrl;
|
|
if (process.env.MONGO_USER && process.env.MONGO_PWD)
|
|
mongoUrl = `mongodb+srv://${process.env.MONGO_USER}:${process.env.MONGO_PWD}@${process.env.MONGO_URL}`;
|
|
else mongoUrl = process.env.MONGO_URL || '';
|
|
const mongoDb = process.env.MONGO_DB || '';
|
|
|
|
try {
|
|
this.instance.mongoClient = await MongoClient.connect(mongoUrl, {
|
|
useNewUrlParser: true,
|
|
useUnifiedTopology: true,
|
|
// loggerLevel: 'debug',
|
|
});
|
|
this.instance.db = this.instance.mongoClient.db(mongoDb);
|
|
if (process.env.NODE_ENV != 'production') console.log('[MongoDB] New Connect');
|
|
} catch (error) {
|
|
throw error;
|
|
}
|
|
} else {
|
|
if (process.env.NODE_ENV != 'production') console.log('[MongoDB] Existing Connect');
|
|
}
|
|
|
|
return DB.instance;
|
|
}
|
|
}
|