42 lines
1.4 KiB
TypeScript
42 lines
1.4 KiB
TypeScript
import { NextResponse } from "next/server";
|
|
import { prisma } from "@/lib/db";
|
|
import { getActiveAccountId } from "@/lib/account-context";
|
|
import { authErrorResponse } from "@/lib/auth/api";
|
|
import { requireUserAccountScope } from "@/lib/auth/user-scope";
|
|
|
|
export async function GET(request: Request) {
|
|
try {
|
|
const accountId = await getActiveAccountId();
|
|
const { where: accountWhere } = await requireUserAccountScope(accountId);
|
|
const topicId = new URL(request.url).searchParams.get("topicId");
|
|
const where = {
|
|
...accountWhere,
|
|
...(topicId ? { topicId } : {}),
|
|
};
|
|
const scans = await prisma.scan.findMany({
|
|
where,
|
|
orderBy: { createdAt: "desc" },
|
|
take: 20,
|
|
include: {
|
|
topic: true,
|
|
items: {
|
|
orderBy: [{ combinedScore: "desc" }, { score: "desc" }],
|
|
include: {
|
|
replies: { orderBy: { likeCount: "desc" } },
|
|
outreachTargets: {
|
|
include: { drafts: { orderBy: { createdAt: "desc" } } },
|
|
},
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
return NextResponse.json({ scans });
|
|
} catch (error) {
|
|
const authRes = authErrorResponse(error);
|
|
if (authRes) return authRes;
|
|
const message = error instanceof Error ? error.message : "讀取海巡紀錄失敗";
|
|
console.error("[scans] GET failed:", error);
|
|
return NextResponse.json({ error: message, scans: [] }, { status: 500 });
|
|
}
|
|
} |