eust-conciliation
Version:
33 lines (25 loc) • 902 B
text/typescript
/* eslint-disable no-continue */
/* eslint-disable no-restricted-syntax */
import {
DeepPartial,
EntityTarget,
ObjectLiteral,
Repository,
} from 'typeorm';
import { getPGConnection } from './postgres';
export abstract class BaseDBRepository<Entity extends ObjectLiteral, Model> {
protected abstract entityClass: EntityTarget<Entity>;
// eslint-disable-next-line no-unused-vars
protected abstract toModel(entity: Entity): Model;
// eslint-disable-next-line no-unused-vars
protected abstract fromModel(model: Partial<Model>): DeepPartial<Entity>;
protected get db(): Repository<Entity> {
const dataSource = getPGConnection();
return dataSource.getRepository<Entity>(this.entityClass);
}
async save(data: Partial<Model>): Promise<Model> {
const entity = this.fromModel(data);
const result = await this.db.save(entity);
return this.toModel(result);
}
}