Files
vfxreview/lib/db.ts
T
twotalesanimation 27f9f7ac64
Deploy / deploy (push) Successful in 3m16s
fix(api): shot API 500 once a version has a ProRes size
Version.highResSize (added in 9660cdc) is a BigInt, and GET
/api/shots/[shotId] spreads whole version rows into NextResponse.json,
converting only fileSize. As soon as worker 1.7.0 finalized an export
with a ProRes upload, JSON.stringify threw "Do not know how to serialize
a BigInt" and the shot page failed to load.

- Convert highResSize alongside fileSize in that route.
- lib/db.ts: serialize any BigInt as a string in JSON (BigInt.prototype
  .toJSON), so other routes returning whole rows can't 500 the same way.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 17:23:03 +02:00

37 lines
1.0 KiB
TypeScript

import { PrismaClient } from "@prisma/client";
// Safety net: Prisma returns BigInt columns (fileSize, highResSize, …) as
// BigInt, which JSON.stringify refuses — one such column anywhere in an API
// response turns the whole route into a 500. Serialize them as strings, the
// same shape the routes that convert them by hand already produce. Routes
// that spread whole rows into NextResponse.json are then safe by default.
declare global {
interface BigInt {
toJSON(): string;
}
}
if (!("toJSON" in BigInt.prototype)) {
Object.defineProperty(BigInt.prototype, "toJSON", {
value: function toJSON(this: bigint) {
return this.toString();
},
writable: true,
configurable: true,
});
}
const globalForPrisma = globalThis as unknown as {
prisma: PrismaClient | undefined;
};
export const db =
globalForPrisma.prisma ??
new PrismaClient({
log:
process.env.NODE_ENV === "development"
? ["query", "error", "warn"]
: ["error"],
});
if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = db;