import { EntityTarget, FindManyOptions, QueryRunner, Repository } from "typeorm"; export abstract class BaseDataService { constructor(private repository: Repository) {} getRepository(): Repository { return this.repository; } async create( queryRunner: QueryRunner, entityTarget: EntityTarget, entity: Entity, ): Promise { const newEntity = queryRunner.manager.create(entityTarget, entity); return await queryRunner.manager.save(newEntity); } async update( queryRunner: QueryRunner, entityTarget: EntityTarget, filterUpdate: any, entity: Entity, ): Promise { 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, id: string, ): Promise { await queryRunner.manager.delete(entityTarget, { id }); } async deleteByOptions( queryRunner: QueryRunner, entityTarget: EntityTarget, findManyOptions: FindManyOptions, ): Promise { await queryRunner.manager.delete(entityTarget, findManyOptions); } async getOneByOptions(findOneOptions): Promise { return await this.repository.findOne(findOneOptions); } }