📖
Prismaでpaginationを楽に実装する(+Nest.jsでの使用法)
Prismaでpaginationするのに便利なパッケージがあったので紹介。
npm installして、
npm i prisma-extension-pagination
paginationをimportしてprisma clientをextendsして使う。
import { PrismaClient } from "@prisma/client";
import pagination from "prisma-extension-pagination";
const prisma = new PrismaClient().$extends(pagination());
すると下記のようにpaginationが使えるようになる。
const [users, meta] = prisma.user
.paginate()
.withPages({
limit: 10,
page: 2,
});
// meta contains the following
{
currentPage: 2,
isFirstPage: false,
isLastPage: false,
previousPage: 1,
nextPage: 3,
}
meta dataにtotal countを含めたり、cursor paginationにしたりすることも可能。
Nest.jsで使う場合
Nest.jsだと、PrismaServiceを作ってそれをDIして他のクラスで使うことが多い。
その場合にどうやってextendsすればいいかもIssueで解説されていた。
以下のようにpg methodを作ってそこでextendsする。
@Injectable()
export class PrismaService extends PrismaClient implements OnModuleInit {
async onModuleInit() {
await this.$connect();
}
pg() {
return this.$extends({
model: {
$allModels: {
paginate,
},
},
});
}
}
使うときは以下のようにする。
findAll(id: string) {
return this.prismaService.pg().user.paginate().withPages({
limit: 10,
});
}
結論
paginationのprisma queryを書く必要がなくなるので、便利なライブラリだと思います。
Nest.jsで使えるのもいいです。
Discussion