45 lines
1.5 KiB
TypeScript
45 lines
1.5 KiB
TypeScript
import { NextResponse } from 'next/server'
|
||
import { getServerSession } from 'next-auth'
|
||
import { authOptions } from '@/lib/auth'
|
||
import { formatFieldOptionValues, getFieldPoolRecords } from '@/lib/field-pool'
|
||
|
||
type FieldPoolRecord = {
|
||
key: string
|
||
label: string
|
||
filterDisplayName?: string | null
|
||
options: Array<{ value: string }>
|
||
isFilterEnabled?: boolean
|
||
filterOrder?: number | null
|
||
}
|
||
|
||
export async function GET(request: Request) {
|
||
try {
|
||
const session = await getServerSession(authOptions)
|
||
if (!session?.user) {
|
||
return NextResponse.json({ error: '请先登录' }, { status: 401 })
|
||
}
|
||
|
||
const fields = (await getFieldPoolRecords()) as FieldPoolRecord[]
|
||
|
||
// 检查是否需要返回所有字段(用于上传表单)
|
||
const url = new URL(request.url)
|
||
const includeAll = url.searchParams.get('includeAll') === 'true'
|
||
|
||
// 如果 includeAll=true,返回所有字段;否则只返回 isFilterEnabled 的字段
|
||
const filteredFields = includeAll ? fields : fields.filter((field) => field.isFilterEnabled)
|
||
|
||
const payload = filteredFields.map((field: FieldPoolRecord) => ({
|
||
fieldKey: field.key,
|
||
fieldLabel: field.filterDisplayName || field.label,
|
||
fieldDefaultLabel: field.label,
|
||
filterOrder: field.filterOrder ?? 0,
|
||
options: formatFieldOptionValues(field.options),
|
||
}))
|
||
|
||
return NextResponse.json(payload)
|
||
} catch (error) {
|
||
console.error('Error fetching template categories:', error)
|
||
return NextResponse.json({ error: '获取模板分类失败' }, { status: 500 })
|
||
}
|
||
}
|