import { NextRequest, NextResponse } from "next/server"; import { db } from "@/lib/db"; import { generatedImage } from "@/lib/db/schema"; import { eq, desc, sql } from "drizzle-orm"; import { auth } from "@/app/(auth)/auth"; export async function GET(request: NextRequest) { try { const session = await auth(); if (!session?.user?.id) { return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); } const userId = session.user.id; // 获取分页参数 const searchParams = request.nextUrl.searchParams; const page = Number.parseInt(searchParams.get("page") || "1"); const pageSize = Number.parseInt(searchParams.get("pageSize") || "24"); const offset = (page - 1) * pageSize; // 查询总数 const countResult = await db .select({ count: sql`count(*)::int` }) .from(generatedImage) .where(eq(generatedImage.userId, userId)); const total = countResult[0]?.count || 0; // 查询当前用户的所有生成图片(分页) const images = await db .select({ id: generatedImage.id, messageId: generatedImage.messageId, url: generatedImage.originalUrl, // 使用原图 URL thumbnailUrl: generatedImage.thumbnailUrl, alt: generatedImage.prompt, // 使用 prompt 作为 alt imageSize: generatedImage.imageSize, createdAt: generatedImage.createdAt, chatId: generatedImage.chatId, modelId: generatedImage.modelId, // 添加 modelId 字段 }) .from(generatedImage) .where(eq(generatedImage.userId, userId)) .orderBy(desc(generatedImage.createdAt)) .limit(pageSize) .offset(offset); // 格式化返回数据 const formattedImages = images.map((img) => ({ id: img.id, messageId: img.messageId, url: img.url, thumbnailUrl: img.thumbnailUrl, alt: img.alt || "AI生成的图片", imageSize: img.imageSize, createdAt: img.createdAt, chatId: img.chatId, modelId: img.modelId, // 添加 modelId 字段 })); const totalPages = Math.ceil(total / pageSize); return NextResponse.json({ images: formattedImages, pagination: { page, pageSize, total, totalPages, } }); } catch (error) { console.error("[Gallery API] Error:", error); return NextResponse.json({ error: "Failed to fetch gallery" }, { status: 500 }); } }