import { Db, MongoClient } from 'mongodb'; import { AddPayload, DeletePayload, UpdatePayload } from '../websockets/interfaces'; export class MongoConnector { private _URL = 'mongodb://localhost:27017/'; private _DBNAME = 'mongorx'; private _db: Db; private _is_initialized: boolean; constructor() { this._is_initialized = false; this.initialize(); } async initialize(): Promise { const client = await MongoClient.connect( this._URL, { useNewUrlParser: true } ); this._db = client.db(this._DBNAME); this._is_initialized = true; return this; } add(bucket_id: string, payload: AddPayload): AddPayload { this._check_init(); this._db.collection(bucket_id).insertMany(payload.items); return payload; } update(bucket_id: string, payload: UpdatePayload): UpdatePayload { this._check_init(); payload.updates.forEach(update => { this._db.collection(bucket_id).update({ id: update.id }, update); }); return payload; } delete(bucket_id: string, payload: DeletePayload): DeletePayload { this._check_init(); payload.ids.forEach(id => { this._db.collection(bucket_id).deleteOne({ id }); }); return payload; } private _check_init() { if (!this._is_initialized) { throw new Error('Not initialized.'); } } }