28 lines
613 B
TypeScript
28 lines
613 B
TypeScript
|
|
export interface PageParams {
|
||
|
|
page: number;
|
||
|
|
limit: number;
|
||
|
|
skip: number;
|
||
|
|
}
|
||
|
|
|
||
|
|
export function parsePage(query: Record<string, unknown>): PageParams {
|
||
|
|
const page = Math.max(1, parseInt(String(query.page ?? "1"), 10) || 1);
|
||
|
|
const limit = Math.min(100, Math.max(1, parseInt(String(query.limit ?? "20"), 10) || 20));
|
||
|
|
return { page, limit, skip: (page - 1) * limit };
|
||
|
|
}
|
||
|
|
|
||
|
|
export function paginatedResponse<T>(
|
||
|
|
data: T[],
|
||
|
|
total: number,
|
||
|
|
{ page, limit }: PageParams
|
||
|
|
) {
|
||
|
|
return {
|
||
|
|
data,
|
||
|
|
pagination: {
|
||
|
|
page,
|
||
|
|
limit,
|
||
|
|
total,
|
||
|
|
totalPages: Math.ceil(total / limit),
|
||
|
|
},
|
||
|
|
};
|
||
|
|
}
|