fix: make traffic payout metrics resilient when ledger table missing
Some checks failed
Deploy to 110 WOOO Server / deploy (push) Failing after 6s

This commit is contained in:
OG T
2026-06-07 16:35:05 +08:00
parent 541338c07f
commit b8ec6cd931

View File

@@ -12,6 +12,15 @@ function asRecordJson(value: unknown): Record<string, unknown> | undefined {
return undefined;
}
function isMissingTableError(error: unknown): boolean {
return (
typeof error === "object" &&
error !== null &&
"code" in error &&
(error as { code: string }).code === "P2021"
);
}
export async function GET(request: NextRequest) {
if (MONITOR_TOKEN) {
const token = request.headers.get("x-traffic-token");
@@ -90,22 +99,33 @@ export async function GET(request: NextRequest) {
metadata: true,
},
}),
prisma.ledgerEntry.count({
where: {
created_at: { gte: since },
phase: "CAPTURE",
response_status: "SUCCESS",
},
}),
prisma.ledgerEntry.count({
where: {
created_at: { gte: since },
phase: "RELEASE",
response_status: "SUCCESS",
},
}),
]);
let capturedPayoutCount = 0;
let releasedPayoutCount = 0;
try {
[capturedPayoutCount, releasedPayoutCount] = await Promise.all([
prisma.ledgerEntry.count({
where: {
created_at: { gte: since },
phase: "CAPTURE",
response_status: "SUCCESS",
},
}),
prisma.ledgerEntry.count({
where: {
created_at: { gte: since },
phase: "RELEASE",
response_status: "SUCCESS",
},
}),
]);
} catch (error) {
if (!isMissingTableError(error)) {
throw error;
}
}
const actionSummary = Object.fromEntries(
summaryRows.map((row) => [row.action, row._count._all])
);