import { NextResponse } from "next/server"; import { getOssImageMigrationJobStats, runOssImageMigrationJob, } from "@/lib/jobs/oss-image-migration-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("[OSSMigrationAPI] CRON_SECRET 未配置,拒绝执行定时任务接口"); return false; } return token === cronSecret; } export async function POST(request: Request) { try { if (!verifyAuthToken(request)) { return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); } const result = await runOssImageMigrationJob(); return NextResponse.json({ success: result.success, message: result.message, migrate: result.migrate, cleanup: result.cleanup, skippedReason: result.skippedReason || null, timestamp: new Date().toISOString(), }); } catch (error: any) { console.error("[OSSMigrationAPI] ❌ Job execution failed:", error); return NextResponse.json( { success: false, error: error?.message || "Job failed", timestamp: new Date().toISOString(), }, { status: 500 } ); } } export async function GET(request: Request) { try { if (!verifyAuthToken(request)) { return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); } const data = await getOssImageMigrationJobStats(); return NextResponse.json({ ...data, timestamp: new Date().toISOString(), }); } catch (error: any) { console.error("[OSSMigrationAPI] ❌ Query failed:", error); return NextResponse.json( { success: false, error: error?.message || "Query failed", timestamp: new Date().toISOString(), }, { status: 500 } ); } }