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 = this.repository.create(entityTarget, entity); return await this.repository.save(entity); } async createMany( queryRunner: QueryRunner, entityTarget: EntityTarget, entity: Entity[], ): Promise { // const newEntity = this.repository.create(entityTarget, entity); return await this.repository.save(entity); } async createBatch( queryRunner: QueryRunner, entityTarget: EntityTarget, entity: Entity[], ): Promise { // const newEntity = this.repository.create(entityTarget, entity); return await this.repository.save(entity); } async update( queryRunner: QueryRunner, entityTarget: EntityTarget, filterUpdate: any, entity: Entity, ): Promise { const newEntity = await this.repository.findOne({ where: filterUpdate, }); if (!newEntity) throw new Error('Data not found!'); Object.assign(newEntity, entity); return await this.repository.save(newEntity); } async deleteById( queryRunner: QueryRunner, entityTarget: EntityTarget, id: string, ): Promise { await this.repository.delete(id); } async deleteByIds( queryRunner: QueryRunner, entityTarget: EntityTarget, ids: string[], ): Promise { await this.repository.delete(ids); } async deleteByOptions( queryRunner: QueryRunner, entityTarget: EntityTarget, findManyOptions: FindManyOptions, ): Promise { const datas = await this.repository.find(findManyOptions); await this.repository.delete(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); } }