Всем привет. Решаю очень простую задачу, заблудился в 2х соснах.
Пишу дефолтный класс для работы с сущьностями которые буду сохранять в бд.
Я очень абстрагирова все свои проекты и пришел к выводу, что любая сущьность создается, обновляется, удаляется итп по одному и тому же алгоритму.
1) Принимаются данные
2) Валидируются
3) Дополняются
4) Сохраняются/Обновляются/Удаляются
Поэтому я решил написать общий класс взаимодействия с бд для всех сущьностей.
Так же это будет очень полезно, если я захочу вдруг поменять бд с монги на другую. То есть мне нужно переопределить только в 1м месте, и добавить некоторые валидаторы и пытаться изначально поддерживать общую структуру для любой бд.
Условный пример:
let _mongooseSchema!: Model<any>;
export interface DefaultInterfase {
_id?: number;
}
export default class DefaultObject {
set mongooseSchema(params: SchemaInitParams) {
_mongooseSchema = mongoose.model(params.schemaName, new Schema(params.schema));
}
public async create(params: Create, helpersDataCB, hendlerCB ): Promise<DefaultInterfase> {
const bulk = _mongooseSchema.collection.initializeOrderedBulkOp();
const errors: Array<{ object: any; note: string }> = [];
let helpersData;
await helpersDataCB(helpersData);
params.list.map(el => {
try {
hendlerCB(el, helpersData)
bulk.insert(el);
} catch (e) {
errors.push({ object: el, note: e.message });
}
});
bulk.execute();
return {some result};
}
}
helpersDataCB - cb которая переопределяет helpersData и вытаскивает из бд другие сущьности
hendlerCB - cb который добавляет какие то данные в основной объект перед сохранением в бд.
По тому же принципу пишутся методы для поиска, апдейта итп.
Далее создается новый класс наследуя этот, коллекция замечательно создается, данные сохраняются и ищутся, но вот интерфейс данных остается базового класса (Promise < DefaultInterfase > ) и переопределить его объявляя новый клас представления не имею как.
create(): NewResult {
super.create()
}
Думаю плохой вариант, если я добавлю или изменю что то в родительском классе, нужно будет проходиться по всем наследованным классам и добавлять ко всем интерфейсы.
Как быть?