const Collection = require('../../util/Collection.js'); class TransactionHandler { constructor(client) { this.client = client; this.transactions = new Collection(); } send(message, options = {}) { /** Message structure * { * provider: string, -- mongodb or mariadb * request: { * type: string, -- The function to use from this class, ex. findOne * collection: string, -- Which collection to query from * query: { }, -- Actual search query * data: { } -- If the operation is to update or insert something, this is what to insert * } * } */ return new Promise((resolve, reject) => { const id = this.transactionID; this.transactions.set(id, { id, resolve, reject }); process.send({ _storage: true, transactionID: id, ...message, ...options }); }); } _receive(message) { if(!message.transactionID) return undefined; const transaction = this.transactions.get(message.transactionID); if(!transaction) return undefined; if(message.error) transaction.reject(message.message); else transaction.resolve(message.result); return this.transactions.delete(message.transactionID); } get transactionID() { return `${[ this.client.shard.ids ]}-${Date.now().toString(36)}`; } } module.exports = TransactionHandler;