/** * Alerts API Proxy - Catch-all route * Proxies all /api/alerts/* requests to backend * Supports: inbox, topics, rules, profile, stats, etc. */ import { NextRequest, NextResponse } from 'next/server' const BACKEND_URL = process.env.BACKEND_URL || 'http://localhost:8000' function getForwardHeaders(request: NextRequest): HeadersInit { const headers: HeadersInit = { 'Content-Type': 'application/json', } // Forward cookie for session auth const cookie = request.headers.get('cookie') if (cookie) { headers['Cookie'] = cookie } // Forward authorization header if present const auth = request.headers.get('authorization') if (auth) { headers['Authorization'] = auth } return headers } export async function GET( request: NextRequest, { params }: { params: Promise<{ path: string[] }> } ) { const { path } = await params const pathStr = path.join('/') const searchParams = request.nextUrl.searchParams.toString() const url = `${BACKEND_URL}/api/alerts/${pathStr}${searchParams ? `?${searchParams}` : ''}` try { const response = await fetch(url, { method: 'GET', headers: getForwardHeaders(request), signal: AbortSignal.timeout(30000) }) if (!response.ok) { const errorText = await response.text() return NextResponse.json( { error: `Backend Error: ${response.status}`, details: errorText }, { status: response.status } ) } const data = await response.json() return NextResponse.json(data) } catch (error) { console.error('Alerts API proxy error:', error) return NextResponse.json( { error: 'Verbindung zum Backend fehlgeschlagen' }, { status: 503 } ) } } export async function POST( request: NextRequest, { params }: { params: Promise<{ path: string[] }> } ) { const { path } = await params const pathStr = path.join('/') const url = `${BACKEND_URL}/api/alerts/${pathStr}` try { const body = await request.json() const response = await fetch(url, { method: 'POST', headers: getForwardHeaders(request), body: JSON.stringify(body), signal: AbortSignal.timeout(30000) }) if (!response.ok) { const errorText = await response.text() return NextResponse.json( { error: `Backend Error: ${response.status}`, details: errorText }, { status: response.status } ) } const data = await response.json() return NextResponse.json(data) } catch (error) { console.error('Alerts API proxy error:', error) return NextResponse.json( { error: 'Verbindung zum Backend fehlgeschlagen' }, { status: 503 } ) } } export async function PUT( request: NextRequest, { params }: { params: Promise<{ path: string[] }> } ) { const { path } = await params const pathStr = path.join('/') const url = `${BACKEND_URL}/api/alerts/${pathStr}` try { const body = await request.json() const response = await fetch(url, { method: 'PUT', headers: getForwardHeaders(request), body: JSON.stringify(body), signal: AbortSignal.timeout(30000) }) if (!response.ok) { const errorText = await response.text() return NextResponse.json( { error: `Backend Error: ${response.status}`, details: errorText }, { status: response.status } ) } const data = await response.json() return NextResponse.json(data) } catch (error) { console.error('Alerts API proxy error:', error) return NextResponse.json( { error: 'Verbindung zum Backend fehlgeschlagen' }, { status: 503 } ) } } export async function DELETE( request: NextRequest, { params }: { params: Promise<{ path: string[] }> } ) { const { path } = await params const pathStr = path.join('/') const url = `${BACKEND_URL}/api/alerts/${pathStr}` try { const response = await fetch(url, { method: 'DELETE', headers: getForwardHeaders(request), signal: AbortSignal.timeout(30000) }) if (!response.ok) { const errorText = await response.text() return NextResponse.json( { error: `Backend Error: ${response.status}`, details: errorText }, { status: response.status } ) } const data = await response.json() return NextResponse.json(data) } catch (error) { console.error('Alerts API proxy error:', error) return NextResponse.json( { error: 'Verbindung zum Backend fehlgeschlagen' }, { status: 503 } ) } }