Files
stock-manager/src/lib/paginate.ts
T
2025-11-12 15:30:12 +01:00

46 lines
919 B
TypeScript
Executable File

import { Prisma } from "@/generated/prisma/client"
import { PaginatedResult } from "@/lib/types"
//eslint-disable-next-line
type PaginationArgs<T> = {
model: any // prisma.<model>
where?: Prisma.Enumerable<any> // filtros
page?: number
pageSize?: number
orderBy?: any
include?: Prisma.Enumerable<any>
select?: Prisma.Enumerable<any>
}
export async function paginate<T>({
model,
where = {},
page = 1,
pageSize = 10,
orderBy = { createdAt: "desc" },
include,
select,
}: PaginationArgs<T>): Promise<PaginatedResult<T>> {
const skip = (page - 1) * pageSize
const [data, totalItems] = await Promise.all([
model.findMany({
where,
skip,
take: pageSize,
orderBy,
include,
select,
}),
model.count({ where }),
])
return {
data,
totalItems,
totalPages: Math.ceil(totalItems / pageSize),
currentPage: page,
pageSize,
}
}