Remove duplicate compliance and DSGVO admin pages that have been superseded by the unified SDK pipeline. Update navigation, sidebar, roles, and module registry to reflect the new structure. Add DSFA corpus API proxy and source-policy components. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
101 lines
2.8 KiB
TypeScript
101 lines
2.8 KiB
TypeScript
/**
|
|
* DSFA Corpus API Proxy
|
|
*
|
|
* Proxies requests to klausur-service for DSFA RAG operations.
|
|
* Endpoints: /api/v1/dsfa-rag/stats, /api/v1/dsfa-rag/sources
|
|
*/
|
|
|
|
import { NextRequest, NextResponse } from 'next/server'
|
|
|
|
const KLAUSUR_SERVICE_URL = process.env.KLAUSUR_SERVICE_URL || 'http://klausur-service:8086'
|
|
|
|
export async function GET(request: NextRequest) {
|
|
const { searchParams } = new URL(request.url)
|
|
const action = searchParams.get('action')
|
|
|
|
try {
|
|
let url = `${KLAUSUR_SERVICE_URL}/api/v1/dsfa-rag`
|
|
|
|
switch (action) {
|
|
case 'status':
|
|
url += '/stats'
|
|
break
|
|
case 'sources':
|
|
url += '/sources'
|
|
break
|
|
case 'source-detail': {
|
|
const code = searchParams.get('code')
|
|
if (!code) {
|
|
return NextResponse.json({ error: 'Missing code parameter' }, { status: 400 })
|
|
}
|
|
url += `/sources/${encodeURIComponent(code)}`
|
|
break
|
|
}
|
|
default:
|
|
return NextResponse.json({ error: 'Unknown action' }, { status: 400 })
|
|
}
|
|
|
|
const res = await fetch(url, {
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
cache: 'no-store',
|
|
})
|
|
|
|
const data = await res.json()
|
|
return NextResponse.json(data, { status: res.status })
|
|
} catch (error) {
|
|
console.error('DSFA corpus proxy error:', error)
|
|
return NextResponse.json(
|
|
{ error: 'Failed to connect to klausur-service' },
|
|
{ status: 503 }
|
|
)
|
|
}
|
|
}
|
|
|
|
export async function POST(request: NextRequest) {
|
|
const { searchParams } = new URL(request.url)
|
|
const action = searchParams.get('action')
|
|
|
|
try {
|
|
let url = `${KLAUSUR_SERVICE_URL}/api/v1/dsfa-rag`
|
|
|
|
switch (action) {
|
|
case 'init': {
|
|
url += '/init'
|
|
const res = await fetch(url, {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
})
|
|
const data = await res.json()
|
|
return NextResponse.json(data, { status: res.status })
|
|
}
|
|
|
|
case 'ingest': {
|
|
const body = await request.json()
|
|
const sourceCode = body.source_code
|
|
if (!sourceCode) {
|
|
return NextResponse.json({ error: 'Missing source_code' }, { status: 400 })
|
|
}
|
|
url += `/sources/${encodeURIComponent(sourceCode)}/ingest`
|
|
const res = await fetch(url, {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify(body),
|
|
})
|
|
const data = await res.json()
|
|
return NextResponse.json(data, { status: res.status })
|
|
}
|
|
|
|
default:
|
|
return NextResponse.json({ error: 'Unknown action' }, { status: 400 })
|
|
}
|
|
} catch (error) {
|
|
console.error('DSFA corpus proxy error:', error)
|
|
return NextResponse.json(
|
|
{ error: 'Failed to connect to klausur-service' },
|
|
{ status: 503 }
|
|
)
|
|
}
|
|
}
|