import { AuditApiResponse, AuditQueryResult, DEFAULT_PAGE_SIZE, extractArray, normalizeRows, resolveTotal, } from "@/app/dashboard/audits/auditTransforms"; import { IGetAuditsParams } from "./types"; import { AUDIT_CACHE_TAG, REVALIDATE_SECONDS } from "./constants"; export async function getAudits({ limit = DEFAULT_PAGE_SIZE, page = 1, sort, filter, entity, signal, }: IGetAuditsParams = {}): Promise { const params = new URLSearchParams(); if (limit) params.set("limit", String(limit)); if (page) params.set("page", String(page)); if (sort) params.set("sort", sort); if (filter) params.set("filter", filter); if (entity) params.set("Entity", entity); const queryString = params.toString(); const response = await fetch( `/api/dashboard/audits${queryString ? `?${queryString}` : ""}`, { method: "GET", signal, next: { revalidate: REVALIDATE_SECONDS, tags: [AUDIT_CACHE_TAG], }, } ); if (!response.ok) { const errorData = await response .json() .catch(() => ({ message: "Unknown error" })); throw new Error(errorData.message || "Failed to fetch audits"); } const payload = (await response.json()) as AuditApiResponse; const pageIndex = page - 1; const auditEntries = extractArray(payload); const rows = normalizeRows(auditEntries, pageIndex); const total = resolveTotal(payload, rows.length); return { rows, total, payload, pageIndex, }; }