53 lines
1.2 KiB
TypeScript
53 lines
1.2 KiB
TypeScript
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<typeof pageQueryParams>;
|
|
|
|
export function getSortObject(
|
|
params: PageQueryParams,
|
|
validFields: Array<string>
|
|
) {
|
|
const sortObj: Record<string, 1 | -1> = {};
|
|
|
|
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,
|
|
validFields: Array<string>
|
|
) {
|
|
const filterObj: Array<{}> = [];
|
|
|
|
if (params.filter && params.filter != "") {
|
|
filterObj.push(...parse(params.filter, validFields));
|
|
}
|
|
|
|
return filterObj;
|
|
}
|