import { z } from "zod"; import { parse } from "./utils/queryParser"; export const pageMetadata = z.object({ count: z.number(), page: z.number(), pageSize: z.number(), }); export const pageQueryParams = z.object({ page: z.number().optional(), pageSize: z.number().optional(), sort: z.string().optional(), filter: z.string().optional(), searchToken: z.string().optional(), }); export type PageQueryParams = z.infer; export function getSortObject( params: PageQueryParams, validFields: Array ) { const sortObj: Record = {}; if (params.sort && params.sort != "") { const sortOptions = params.sort.split(","); sortOptions.forEach((item) => { const order = item.startsWith("-") ? -1 : 1; const field = item.replace("-", "").trim(); if (validFields.includes(field)) sortObj[field] = order; }); } if (Object.keys(sortObj).length == 0) sortObj["createdAt"] = -1; return sortObj; } export function getFilterObject(params: PageQueryParams) { if (params.filter && params.filter != "") { const parsedQuery = parse(params.filter.split("|")).filter( (query) => Object.keys(query).length > 0 ); return parsedQuery; } }