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

76 lines
2.1 KiB
TypeScript

import { AUTH_COOKIE_NAME, BE_BASE_URL } from "@/app/services/constants";
import { NextRequest, NextResponse } from "next/server";
const DEFAULT_LIMIT = "25";
const DEFAULT_PAGE = "1";
export async function GET(request: NextRequest) {
try {
const { cookies } = await import("next/headers");
const cookieStore = await cookies();
const token = cookieStore.get(AUTH_COOKIE_NAME)?.value;
if (!token) {
return NextResponse.json(
{ message: "Missing Authorization header" },
{ status: 401 }
);
}
const { searchParams } = new URL(request.url);
const proxiedParams = new URLSearchParams();
// Forward provided params
searchParams.forEach((value, key) => {
if (value == null || value === "") return;
proxiedParams.append(key, value);
});
if (!proxiedParams.has("limit")) {
proxiedParams.set("limit", DEFAULT_LIMIT);
}
if (!proxiedParams.has("page")) {
proxiedParams.set("page", DEFAULT_PAGE);
}
const backendUrl = `${BE_BASE_URL}/api/v1/audit${
proxiedParams.size ? `?${proxiedParams.toString()}` : ""
}`;
const response = await fetch(backendUrl, {
method: "GET",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${token}`,
},
next: {
revalidate: 60,
tags: ["audits"],
},
});
if (!response.ok) {
const errorData = await response
.json()
.catch(() => ({ message: "Failed to fetch audits" }));
return NextResponse.json(
{
success: false,
message: errorData?.message || "Failed to fetch audits",
},
{ status: response.status }
);
}
const data = await response.json();
return NextResponse.json(data, { status: response.status });
} catch (err: unknown) {
console.error("Proxy GET /api/v1/audits error:", err);
const errorMessage = err instanceof Error ? err.message : "Unknown error";
return NextResponse.json(
{ message: "Internal server error", error: errorMessage },
{ status: 500 }
);
}
}