Files
soul-yongping/app/api/db/config/route.ts

138 lines
3.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 系统配置API
* 优先 Prisma失败时回退到 lib/db避免 Prisma 连接池超时导致 500
*/
import { NextRequest, NextResponse } from 'next/server'
import { prisma } from '@/lib/prisma'
import { getPrismaConfig, setPrismaConfig } from '@/lib/prisma-helpers'
import { query } from '@/lib/db'
/**
* GET - 获取配置
*/
export async function GET(request: NextRequest) {
const { searchParams } = new URL(request.url)
const key = searchParams.get('key')
try {
if (key) {
let config = await getPrismaConfig(key)
if (config == null) {
const rows = await query(
'SELECT config_value FROM system_config WHERE config_key = ?',
[key]
) as any[]
config = rows[0]?.config_value ?? null
}
return NextResponse.json({
success: true,
data: config
})
}
let configs: any[]
try {
configs = await prisma.system_config.findMany({
orderBy: { config_key: 'asc' }
})
} catch (e) {
const rows = await query(
'SELECT id, config_key, config_value, description, created_at, updated_at FROM system_config ORDER BY config_key ASC'
) as any[]
configs = rows || []
}
return NextResponse.json({
success: true,
data: configs
})
} catch (error) {
console.error('[Config API] GET错误:', error)
return NextResponse.json({
success: false,
error: '获取配置失败'
}, { status: 500 })
}
}
/**
* POST - 创建/更新配置
*/
export async function POST(request: NextRequest) {
try {
const body = await request.json()
const { key, value, description } = body
if (!key) {
return NextResponse.json({
success: false,
error: '配置键不能为空'
}, { status: 400 })
}
const valueStr = typeof value === 'string' ? value : JSON.stringify(value ?? null)
try {
await setPrismaConfig(key, value, description)
} catch (e) {
await query(
`INSERT INTO system_config (config_key, config_value, description, updated_at) VALUES (?, ?, ?, NOW())
ON DUPLICATE KEY UPDATE config_value = ?, description = ?, updated_at = NOW()`,
[key, valueStr, description || null, valueStr, description || null]
)
}
return NextResponse.json({
success: true,
message: '配置保存成功'
})
} catch (error) {
console.error('[Config API] POST错误:', error)
return NextResponse.json({
success: false,
error: '保存配置失败'
}, { status: 500 })
}
}
/**
* DELETE - 删除配置
*/
export async function DELETE(request: NextRequest) {
try {
const { searchParams } = new URL(request.url)
const key = searchParams.get('key')
if (!key) {
return NextResponse.json({
success: false,
error: '配置键不能为空'
}, { status: 400 })
}
try {
await prisma.system_config.delete({
where: { config_key: key }
})
} catch (e: any) {
if (e.code === 'P2025') {
return NextResponse.json({
success: false,
error: '配置不存在'
}, { status: 404 })
}
await query('DELETE FROM system_config WHERE config_key = ?', [key])
}
return NextResponse.json({
success: true,
message: '配置删除成功'
})
} catch (error: any) {
console.error('[Config API] DELETE错误:', error)
return NextResponse.json({
success: false,
error: '删除配置失败'
}, { status: 500 })
}
}