import { FindOneOptions, Repository, SelectQueryBuilder } from 'typeorm'; import { BaseFilterEntity } from '../../domain/entities/base-filter.entity'; import { PaginationResponse } from 'src/core/response/domain/ok-response.interface'; export abstract class BaseReadService { constructor(private repository: Repository) {} getRepository(): Repository { return this.repository; } async getIndex( queryBuilder: SelectQueryBuilder, params: BaseFilterEntity, ): Promise> { const [data, total] = await queryBuilder .take(+params.limit) .skip(+params.limit * +params.page - +params.limit) .getManyAndCount(); return { data, total, }; } async getOneByOptions(findOneOptions): Promise { return await this.repository.findOne(findOneOptions); } async getOneOrFailByOptions( findOneOptions: FindOneOptions, ): Promise { return await this.repository.findOneOrFail(findOneOptions); } async getManyByOptions(findManyOptions): Promise { return await this.repository.find(findManyOptions); } }