66 lines
1.8 KiB
TypeScript

import { NextResponse } from "next/server";
import { runImageArchiveJob } from "@/lib/jobs/image-archive-job";
import { getImageArchiveTaskStats } from "@/lib/storage/image-archive-db";
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("[ImageArchiveAPI] CRON_SECRET is not configured");
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 runImageArchiveJob();
return NextResponse.json({
...result,
timestamp: new Date().toISOString(),
});
} catch (error) {
console.error("[ImageArchiveAPI] Job execution failed:", error);
return NextResponse.json(
{
success: false,
error: error instanceof Error ? error.message : String(error),
timestamp: new Date().toISOString(),
},
{ status: 500 }
);
}
}
export async function GET(request: Request) {
try {
if (!verifyAuthToken(request)) {
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
}
const stats = await getImageArchiveTaskStats();
return NextResponse.json({
success: true,
stats,
timestamp: new Date().toISOString(),
});
} catch (error) {
console.error("[ImageArchiveAPI] Stats query failed:", error);
return NextResponse.json(
{
success: false,
error: error instanceof Error ? error.message : String(error),
timestamp: new Date().toISOString(),
},
{ status: 500 }
);
}
}