src/common/utils/pagination.util.ts
Properties |
| limit |
limit:
|
Type : number
|
| Optional |
| page |
page:
|
Type : number
|
| Optional |
| search |
search:
|
Type : string
|
| Optional |
| sortBy |
sortBy:
|
Type : string
|
| Optional |
| sortOrder |
sortOrder:
|
Type : "asc" | "desc"
|
| Optional |
export interface PaginationParams {
page?: number;
limit?: number;
sortBy?: string;
sortOrder?: 'asc' | 'desc';
search?: string;
}
export interface PaginationMeta {
page: number;
limit: number;
total: number;
totalPages: number;
hasNext: boolean;
hasPrev: boolean;
}
export function buildPaginationQuery(params: PaginationParams) {
const page = Math.max(1, params.page || 1);
const limit = Math.min(100, Math.max(1, params.limit || 20));
const skip = (page - 1) * limit;
const orderBy: Record<string, string> = {};
if (params.sortBy) {
orderBy[params.sortBy] = params.sortOrder || 'asc';
} else {
orderBy['createdAt'] = 'desc';
}
return { skip, take: limit, orderBy, page, limit };
}
export function buildPaginationMeta(
total: number,
page: number,
limit: number,
): PaginationMeta {
const totalPages = Math.ceil(total / limit);
return {
page,
limit,
total,
totalPages,
hasNext: page < totalPages,
hasPrev: page > 1,
};
}