54 lines
1.6 KiB
TypeScript
54 lines
1.6 KiB
TypeScript
import { EntityTarget, FindManyOptions, QueryRunner, Repository } from "typeorm";
|
|
|
|
export abstract class BaseDataService<Entity> {
|
|
|
|
constructor(private repository: Repository<Entity>) {}
|
|
|
|
getRepository(): Repository<Entity> {
|
|
return this.repository;
|
|
}
|
|
|
|
async create(
|
|
queryRunner: QueryRunner,
|
|
entityTarget: EntityTarget<Entity>,
|
|
entity: Entity,
|
|
): Promise<Entity> {
|
|
const newEntity = queryRunner.manager.create(entityTarget, entity);
|
|
return await queryRunner.manager.save(newEntity);
|
|
}
|
|
|
|
async update(
|
|
queryRunner: QueryRunner,
|
|
entityTarget: EntityTarget<Entity>,
|
|
filterUpdate: any,
|
|
entity: Entity,
|
|
): Promise<Entity> {
|
|
const newEntity = await queryRunner.manager.findOne(entityTarget, {
|
|
where: filterUpdate,
|
|
});
|
|
|
|
if (!newEntity) throw new Error('Data not found!');
|
|
Object.assign(newEntity, entity);
|
|
return await queryRunner.manager.save(newEntity);
|
|
}
|
|
|
|
async deleteById(
|
|
queryRunner: QueryRunner,
|
|
entityTarget: EntityTarget<Entity>,
|
|
id: string,
|
|
): Promise<void> {
|
|
await queryRunner.manager.delete(entityTarget, { id });
|
|
}
|
|
|
|
async deleteByOptions(
|
|
queryRunner: QueryRunner,
|
|
entityTarget: EntityTarget<Entity>,
|
|
findManyOptions: FindManyOptions<Entity>,
|
|
): Promise<void> {
|
|
await queryRunner.manager.delete(entityTarget, findManyOptions);
|
|
}
|
|
|
|
async getOneByOptions(findOneOptions): Promise<Entity> {
|
|
return await this.repository.findOne(findOneOptions);
|
|
}
|
|
} |