2026-05-23 11:09:03 +08:00

71 lines
1.9 KiB
TypeScript

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 }
);
}
}