import { NextResponse } from "next/server"; import { getDueDingTalkNotificationTasks, runDingTalkNotificationJob, } from "@/lib/jobs/dingtalk-notification-job"; function verifyAuthToken(request: Request): boolean { const authHeader = request.headers.get("authorization"); const token = authHeader?.replace("Bearer ", ""); const cronSecret = process.env.CRON_SECRET; if (!cronSecret) { console.error("[DingTalkNotificationJob] CRON_SECRET 未配置,拒绝执行定时任务接口"); return false; } return token === cronSecret; } export async function GET(request: Request) { try { if (!verifyAuthToken(request)) { return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); } const tasks = await getDueDingTalkNotificationTasks(20); return NextResponse.json({ dueCount: tasks.length, tasks: tasks.map((task) => ({ id: task.id, title: task.title, status: task.status, scheduledAt: task.scheduledAt, createdAt: task.createdAt, })), timestamp: new Date().toISOString(), }); } catch (error) { return NextResponse.json( { success: false, error: error instanceof Error ? error.message : "查询钉钉通知任务失败", timestamp: new Date().toISOString(), }, { status: 500 }, ); } } export async function POST(request: Request) { try { if (!verifyAuthToken(request)) { return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); } const result = await runDingTalkNotificationJob(); return NextResponse.json({ success: true, result, timestamp: new Date().toISOString(), }); } catch (error) { return NextResponse.json( { success: false, error: error instanceof Error ? error.message : "执行钉钉通知任务失败", timestamp: new Date().toISOString(), }, { status: 500 }, ); } }