import { EntityTarget, FindManyOptions, ObjectLiteral, Repository, } from 'typeorm'; import { DatabaseProvider } from '.'; import { Paginated, PaginationParam } from '@/@types/pagination'; export class BaseRepository extends Repository { constructor(entity: EntityTarget) { const baseRepository = DatabaseProvider.getDatasource().getRepository(entity); super( baseRepository.target, baseRepository.manager, baseRepository.queryRunner, ); } async getPaginated( { page, size }: PaginationParam = { page: 1, size: 10 }, options: FindManyOptions = {}, ): Promise> { page = parseInt(page.toString()) || 1; size = parseInt(size.toString()) || 10; const [items, totalItems] = await this.findAndCount({ skip: (page - 1) * size, take: size, ...options, }); const totalPages = Math.ceil(totalItems / size); const totalSize = totalItems; return { items, page, size, totalPages, totalSize, }; } }