Files
soul/app/api/book/sync/route.ts

73 lines
1.7 KiB
TypeScript

import { NextResponse } from 'next/server'
import { exec } from 'child_process'
import { promisify } from 'util'
const execAsync = promisify(exec)
export async function POST() {
try {
// 执行同步脚本
const { stdout, stderr } = await execAsync('node scripts/sync-book-content.js')
if (stderr) {
console.error('Sync stderr:', stderr)
}
console.log('Sync stdout:', stdout)
return NextResponse.json({
success: true,
message: '章节同步成功',
output: stdout
})
} catch (error) {
console.error('Sync error:', error)
return NextResponse.json(
{
success: false,
error: '同步失败',
details: error instanceof Error ? error.message : 'Unknown error'
},
{ status: 500 }
)
}
}
// 获取同步状态
export async function GET() {
try {
const fs = require('fs')
const path = require('path')
const dataPath = path.join(process.cwd(), 'public/book-chapters.json')
if (!fs.existsSync(dataPath)) {
return NextResponse.json({
success: false,
synced: false,
message: '章节数据未生成'
})
}
const stats = fs.statSync(dataPath)
const fileContent = fs.readFileSync(dataPath, 'utf-8')
const chapters = JSON.parse(fileContent)
return NextResponse.json({
success: true,
synced: true,
totalChapters: chapters.length,
lastSyncTime: stats.mtime,
message: '章节数据已同步'
})
} catch (error) {
return NextResponse.json(
{
success: false,
synced: false,
error: '获取状态失败'
},
{ status: 500 }
)
}
}