fix: bigint serialization 500s in video and approval responses

Two endpoints return 500 whenever they succeed, because their success
payloads include VideoVersion rows whose sizeBytes column is a BigInt
that JSON.stringify rejects:

- PATCH /api/projects/[projectId]/videos/[videoId] included all versions;
  respond with scalar video fields only, which is all any caller reads
- POST /api/approvals/[requestId]/decision included the full version row
  in the resolved request; select the scalar fields the response and
  notifications actually use

The approval bug is reachable the first time any approver responds to a
request; the decision itself commits, but the requester sees an error.

Co-Authored-By: Claude Fable 5 <[email protected]>
This commit is contained in:
eehkay
2026-07-18 09:17:57 -07:00
co-authored by Claude Fable 5
parent 33008d33ad
commit 00589f3453
2 changed files with 19 additions and 5 deletions
@@ -191,12 +191,19 @@ export async function PATCH(request: NextRequest, { params }: RouteParams) {
if (typeof description === 'string') updateData.description = description.trim() || null;
if (position !== undefined) updateData.position = position;
// Keep the response to scalar video fields: including versions would pull
// in BigInt columns (sizeBytes) that JSON.stringify cannot serialize, and
// no caller consumes the success payload beyond these fields.
const updatedVideo = await db.video.update({
where: { id: videoId },
data: updateData,
include: {
versions: { orderBy: { versionNumber: 'desc' } },
_count: { select: { versions: true } },
select: {
id: true,
title: true,
description: true,
position: true,
projectId: true,
updatedAt: true,
},
});