This commit is contained in:
g
2025-02-07 21:33:13 +00:00
parent 8900bbcc76
commit 891f57d729
50 changed files with 165 additions and 444 deletions

35
lib/server-service.ts Normal file
View File

@@ -0,0 +1,35 @@
import { cookies } from 'next/headers';
import { redirect } from 'next/navigation';
/**
* Server-side fetch wrapper with authentication.
*/
export async function fetchServer<T = unknown>(
endpoint: string,
options: RequestInit = {}
): Promise<T> {
const cookieStore = cookies();
const authToken = cookieStore.get('Authorization')?.value;
if (!authToken) redirect('/login');
try {
const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}${endpoint}`, {
...options,
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${authToken}`,
...options.headers,
},
cache: 'no-store',
});
if (res.status === 401) redirect('/login');
if (!res.ok) throw new Error(`Request failed: ${res.statusText}`);
return res.json();
} catch (error) {
console.error(`Server request to ${endpoint} failed:`, error);
throw error;
}
}