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 createBatch( 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 { const datas = await queryRunner.manager.find(entityTarget, findManyOptions); await queryRunner.manager.delete( entityTarget, datas?.map((item) => item['id']), ); } async getOneByOptions(findOneOptions): Promise { return await this.repository.findOne(findOneOptions); } async getManyByOptions(findOneOptions): Promise { return await this.repository.find(findOneOptions); } }