56 lines
1.9 KiB
TypeScript
56 lines
1.9 KiB
TypeScript
import { NextRequest, NextResponse } from 'next/server'
|
|
import { getDb } from '@/lib/db'
|
|
import { initDatabase } from '@/lib/db-schema'
|
|
import { getCurrentUser } from '@/lib/auth'
|
|
import { hasPermission } from '@/lib/permissions'
|
|
import { generateMonthlyReport } from '@/lib/monthly-report'
|
|
import { generateWeeklyReport } from '@/lib/weekly-report'
|
|
|
|
export async function POST(
|
|
_request: NextRequest,
|
|
{ params }: { params: Promise<{ id: string }> }
|
|
) {
|
|
try {
|
|
initDatabase()
|
|
const user = await getCurrentUser()
|
|
if (!user) return NextResponse.json({ error: '未登录' }, { status: 401 })
|
|
if (!hasPermission(user, 'reports:create')) {
|
|
return NextResponse.json({ error: '权限不足' }, { status: 403 })
|
|
}
|
|
|
|
const { id } = await params
|
|
const db = getDb()
|
|
const report = db.prepare('SELECT * FROM reports WHERE id = ?').get(id) as any
|
|
|
|
if (!report) {
|
|
return NextResponse.json({ error: '报告不存在' }, { status: 404 })
|
|
}
|
|
|
|
if (report.status !== 'ready' && report.status !== 'failed') {
|
|
return NextResponse.json(
|
|
{ error: `当前状态 "${report.status}" 不允许生成文档` },
|
|
{ status: 409 }
|
|
)
|
|
}
|
|
|
|
db.prepare("UPDATE reports SET status = 'generating', error_message = NULL WHERE id = ?")
|
|
.run(id)
|
|
|
|
if (report.report_type === 'weekly') {
|
|
generateWeeklyReport(Number(id)).catch(err => {
|
|
console.error(`Weekly report generation failed for report ${id}:`, err)
|
|
})
|
|
} else {
|
|
generateMonthlyReport(Number(id)).catch(err => {
|
|
console.error(`Report generation failed for report ${id}:`, err)
|
|
})
|
|
}
|
|
|
|
const updated = db.prepare('SELECT * FROM reports WHERE id = ?').get(id)
|
|
return NextResponse.json({ report: updated })
|
|
} catch (e) {
|
|
const msg = e instanceof Error ? e.message : '生成失败'
|
|
return NextResponse.json({ error: msg }, { status: 500 })
|
|
}
|
|
}
|