@e22m4u/js-repository
Version:
Реализация репозитория для работы с базами данных в Node.js
230 lines (213 loc) • 5.33 kB
JavaScript
/* eslint no-unused-vars: 0 */
/* eslint jsdoc/require-returns-check: 0 */
import {Service} from '@e22m4u/js-service';
import {NotImplementedError} from '../errors/index.js';
import {InclusionDecorator} from './decorator/index.js';
import {DefaultValuesDecorator} from './decorator/index.js';
import {DataValidationDecorator} from './decorator/index.js';
import {DataSanitizingDecorator} from './decorator/index.js';
import {FieldsFilteringDecorator} from './decorator/index.js';
import {DataTransformationDecorator} from './decorator/index.js';
import {PropertyUniquenessDecorator} from './decorator/index.js';
/**
* Adapter class name.
*
* @type {string}
*/
export const ADAPTER_CLASS_NAME = 'Adapter';
/**
* Adapter.
*/
export class Adapter extends Service {
/**
* Kind.
*
* @type {string}
*/
static kinds = [...Service.kinds, ADAPTER_CLASS_NAME];
/**
* Settings.
*
* @type {object|undefined}
*/
_settings;
/**
* Settings.
*
* @returns {object|undefined}
*/
get settings() {
return this._settings;
}
/**
* Constructor.
*
* @param {object|undefined} container
* @param {object|undefined} settings
*/
constructor(container = undefined, settings = undefined) {
super(container);
this._settings = settings;
// decorate only extended classes
if (this.constructor !== Adapter) {
this.getService(DataSanitizingDecorator).decorate(this);
this.getService(DefaultValuesDecorator).decorate(this);
this.getService(DataTransformationDecorator).decorate(this);
this.getService(DataValidationDecorator).decorate(this);
this.getService(PropertyUniquenessDecorator).decorate(this);
this.getService(FieldsFilteringDecorator).decorate(this);
this.getService(InclusionDecorator).decorate(this);
}
}
/**
* Create.
*
* @param {string} modelName
* @param {object} modelData
* @param {object|undefined} filter
* @returns {Promise<object>}
*/
create(modelName, modelData, filter = undefined) {
throw new NotImplementedError(
'%s.create is not implemented.',
this.constructor.name,
);
}
/**
* Replace by id.
*
* @param {string} modelName
* @param {number|string} id
* @param {object} modelData
* @param {object|undefined} filter
* @returns {Promise<object>}
*/
replaceById(modelName, id, modelData, filter = undefined) {
throw new NotImplementedError(
'%s.replaceById is not implemented.',
this.constructor.name,
);
}
/**
* Replace or create.
*
* @param {string} modelName
* @param {object} modelData
* @param {object|undefined} filter
* @returns {Promise<object>}
*/
replaceOrCreate(modelName, modelData, filter = undefined) {
throw new NotImplementedError(
'%s.replaceOrCreate is not implemented.',
this.constructor.name,
);
}
/**
* Patch.
*
* @param {string} modelName
* @param {object} modelData
* @param {object|undefined} where
* @returns {Promise<number>}
*/
patch(modelName, modelData, where = undefined) {
throw new NotImplementedError(
'%s.patch is not implemented.',
this.constructor.name,
);
}
/**
* Patch by id.
*
* @param {string} modelName
* @param {number|string} id
* @param {object} modelData
* @param {object|undefined} filter
* @returns {Promise<object>}
*/
patchById(modelName, id, modelData, filter = undefined) {
throw new NotImplementedError(
'%s.patchById is not implemented.',
this.constructor.name,
);
}
/**
* Find.
*
* @param {string} modelName
* @param {object|undefined} filter
* @returns {Promise<object[]>}
*/
find(modelName, filter = undefined) {
throw new NotImplementedError(
'%s.find is not implemented.',
this.constructor.name,
);
}
/**
* Find by id.
*
* @param {string} modelName
* @param {number|string} id
* @param {object|undefined} filter
* @returns {Promise<object>}
*/
findById(modelName, id, filter = undefined) {
throw new NotImplementedError(
'%s.findById is not implemented.',
this.constructor.name,
);
}
/**
* Delete.
*
* @param {string} modelName
* @param {object|undefined} where
* @returns {Promise<number>}
*/
delete(modelName, where = undefined) {
throw new NotImplementedError(
'%s.delete is not implemented.',
this.constructor.name,
);
}
/**
* Delete by id.
*
* @param {string} modelName
* @param {number|string} id
* @returns {Promise<boolean>}
*/
deleteById(modelName, id) {
throw new NotImplementedError(
'%s.deleteById is not implemented.',
this.constructor.name,
);
}
/**
* Exists.
*
* @param {string} modelName
* @param {number|string} id
* @returns {Promise<boolean>}
*/
exists(modelName, id) {
throw new NotImplementedError(
'%s.exists is not implemented.',
this.constructor.name,
);
}
/**
* Count.
*
* @param {string} modelName
* @param {object|undefined} where
* @returns {Promise<number>}
*/
count(modelName, where = undefined) {
throw new NotImplementedError(
'%s.count is not implemented.',
this.constructor.name,
);
}
}