File

apps/recallassess/recallassess-api/src/api/admin/report/utils/report-valuelist-query.util.ts

Description

Shared query parsing for report searchable-select (valuelist) HTTP endpoints. Aligns with module list behavior: keyword, page, limit (same defaults/cap as core Pagination query parsing).

Index

Properties

Properties

keyword
keyword: string
Type : string
Optional
limit
limit: number
Type : number
page
page: number
Type : number
skip
skip: number
Type : number
export interface ReportValuelistListQuery {
  keyword?: string;
  page: number;
  limit: number;
  skip: number;
}

function pickFirst(v: string | string[] | undefined): string | undefined {
  if (v === undefined) {
    return undefined;
  }
  return Array.isArray(v) ? v[0] : v;
}

/**
 * Parses `keyword`, `page`, and `limit` from a request query object.
 * - `keyword`: trimmed; empty/whitespace → undefined (no filter).
 * - `page`: default 1, minimum 1.
 * - `limit`: default 50, clamped to 1..5000 (same max as core Pagination decorator).
 */
export function parseReportValuelistListQuery(
  query: Record<string, string | string[] | undefined>,
): ReportValuelistListQuery {
  const rawKeyword = pickFirst(query["keyword"]);
  const keyword =
    typeof rawKeyword === "string" && rawKeyword.trim().length > 0 ? rawKeyword.trim() : undefined;

  let page = Number.parseInt(pickFirst(query["page"]) ?? "1", 10);
  if (!Number.isFinite(page) || page < 1) {
    page = 1;
  }

  let limit = Number.parseInt(pickFirst(query["limit"]) ?? "50", 10);
  if (!Number.isFinite(limit)) {
    limit = 50;
  }
  if (limit > 5000) {
    limit = 5000;
  }
  if (limit < 1) {
    limit = 1;
  }

  const skip = (page - 1) * limit;
  return { keyword, page, limit, skip };
}

results matching ""

    No results matching ""