mirror of
https://github.com/trafficlunar/tomodachi-share.git
synced 2026-03-28 11:13:16 +00:00
41 lines
1.2 KiB
TypeScript
41 lines
1.2 KiB
TypeScript
import { NextResponse } from "next/server";
|
|
import { auth } from "@/lib/auth";
|
|
import { prisma } from "@/lib/prisma";
|
|
import { generateMetadataImage } from "@/lib/images";
|
|
|
|
export async function PATCH() {
|
|
const session = await auth();
|
|
if (!session) return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
|
|
|
|
if (Number(session.user?.id) !== Number(process.env.NEXT_PUBLIC_ADMIN_USER_ID)) return NextResponse.json({ error: "Forbidden" }, { status: 403 });
|
|
|
|
// Start processing in background
|
|
regenerateImages().catch(console.error);
|
|
|
|
return NextResponse.json({ success: true });
|
|
}
|
|
|
|
async function regenerateImages() {
|
|
// Get miis in batches to reduce memory usage
|
|
const BATCH_SIZE = 10;
|
|
const totalMiis = await prisma.mii.count();
|
|
let processed = 0;
|
|
|
|
for (let skip = 0; skip < totalMiis; skip += BATCH_SIZE) {
|
|
const miis = await prisma.mii.findMany({
|
|
skip,
|
|
take: BATCH_SIZE,
|
|
include: { user: { select: { name: true } } },
|
|
});
|
|
|
|
// Process each batch sequentially to avoid overwhelming the server
|
|
for (const mii of miis) {
|
|
try {
|
|
await generateMetadataImage(mii, mii.user.name);
|
|
processed++;
|
|
} catch (error) {
|
|
console.error(`Failed to generate image for mii ${mii.id}:`, error);
|
|
}
|
|
}
|
|
}
|
|
}
|