File

src/common/utils/pagination.util.ts

Index

Properties

Properties

limit
limit: number
Type : number
Optional
page
page: number
Type : number
Optional
search
search: string
Type : string
Optional
sortBy
sortBy: string
Type : string
Optional
sortOrder
sortOrder: "asc" | "desc"
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,
  };
}

results matching ""

    No results matching ""