UNPKG

eris-boiler

Version:
116 lines (103 loc) 3.32 kB
const DatabaseObject = require('../database-object') const DatabaseQuery = require('../database-query') class DatabaseManager { /** * Class representing a database manager. * @param {DatabaseManagerOptions} options The DatabaseManagerOptions. */ constructor ({ DataQuery = (...args) => new DatabaseQuery(...args), DataObject = (...args) => new DatabaseObject(...args) } = {}) { /** * @type {DatabaseQuery} * @private */ this._queryBuilder = DataQuery /** * @type {DatabaseObject} * @private */ this._objectBuilder = DataObject } /** * Create a new DatabaseObject. * @param {string} type The type of DatabaseObject to create. * @param {any} data The data to initialize the DataObject with. * @param {boolean} [isNew=true] Whether or not the DatabaseObject should be treated as a new record. * @returns {DatabaseObject} The new DatabaseObject. */ newObject (type, data, isNew = true) { return this._objectBuilder(this, type, data, { isNew }) } /** * Start a DatabaseQuery. * @param {string} type The type of DatabaseObject to query for. * @returns {DatabaseQuery} The new DatabaseQuery. */ newQuery (type) { return this._queryBuilder(this, type) } /** * Add a new DatabaseObject. * @abstract * @param {string} type The type of DatabaseObject to add. * @param {any} data The raw data for the new DatabaseObject. * @returns {Promise<any>} The new DatabaseObject (should not need to be saved). */ async add (type, data) { throw Error('not yet implemented') } /** * Delete a DatabaseObject. * @abstract * @param {DatabaseObject} object The DatabaseObject to delete. * @returns {Promise<void>} */ async delete (object) { throw Error('not yet implemented') } /** * Update a Database Object. * @abstract * @param {DatabaseObject} object The DatabaseObject to update. * @returns {Promise<any>} The raw data of the DatabaseObject. */ async update (object) { throw Error('not yet implemented') } /** * Execute a DatabaseQuery that can only return a single unique DataObject. * @abstract * @param {DatabaseQuery} query The DatabaseQuery to execute. * @returns {Promise<any>} The raw data of the DatabaseObject. */ async get (query) { throw Error('not yet implemented') } /** * Execute a DatabaseQuery. * @abstract * @param {DatabaseQuery} query The DatabaseQuery to execute. * @returns {Promise<Array<any>>} The raw data of the DatabaseObject(s). */ async find (query) { throw Error('not yet implemented') } } module.exports = DatabaseManager /** * @typedef DatabaseManagerOptions * @property {DatabaseObjectBuilder} DataObject DatabaseObject constructor to structure database values. * @property {DatabaseQueryBuilder} DataQuery DatabaseQuery constructor to structure database values. */ /** * @callback DatabaseObjectBuilder * @param {...any} params The params. * @returns {DatabaseObject} */ /** * @callback DatabaseQueryBuilder * @param {...any} params The params. * @returns {DatabaseQuery} */