【发布时间】:2022-01-20 04:23:03
【问题描述】:
我注意到分页代码倾向于从一个实体到另一个实体重复,并且应该将其抽象出来,即限制和跳过文档并不关心我们使用的是哪种类型的基础文档,因此无需为许多不同的实体编写相同的代码。
在 TypeORM 存储库类上概括分页的最佳方法是什么,无论存储库通用类型是什么?
最好这也应该是可测试的。
【问题讨论】:
标签: pagination nestjs typeorm
我注意到分页代码倾向于从一个实体到另一个实体重复,并且应该将其抽象出来,即限制和跳过文档并不关心我们使用的是哪种类型的基础文档,因此无需为许多不同的实体编写相同的代码。
在 TypeORM 存储库类上概括分页的最佳方法是什么,无论存储库通用类型是什么?
最好这也应该是可测试的。
【问题讨论】:
标签: pagination nestjs typeorm
您可以创建一个 BaseRepository 类,该类扩展 Repository 类的 typeorm 并在该类中添加此方法。现在您需要从BaseRepository 扩展您的自定义存储库,而不是Repository typeorm 类。
例子:
BaseRepository:
class BaseRepository<Entity> extends Repository<Entity> {
async getPaginatedData(limit: number, offset: number) {
const [data, total] = await this.findAndCount({
take: limit,
skip: offset,
});
return {
result: data,
count: total,
};
}
}
用户存储库:
@EntityRepository(User)
export class UserRepository extends BaseRepository<User> {
// add user related methods...
}
用户服务:
@Injectable()
export class UserService {
constructor(
@InjectRepository(UserRepository) private userRepository: UserRepository,
) {}
getUsers() {
// Here you have access to this method because UserRepository is extended from BaseRepository
return this.userRepository.getPaginatedData(10, 0);
}
}
【讨论】: