2025-11-27 09:09:43 +01:00

61 lines
1.5 KiB
TypeScript

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<AuditQueryResult> {
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,
};
}