feat(client-portal): group shots by scene
Deploy / deploy (push) Successful in 3m31s

Collapsible scene sub-headers inside each episode, in scene order with
per-scene status counts; the review queue follows the same order. Aliased
shots go out without a scene so our numbering never reaches the client.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
twotalesanimation
2026-10-06 08:41:19 +02:00
parent 1d60a55b3c
commit 27d9618995
2 changed files with 231 additions and 139 deletions
+6 -1
View File
@@ -48,6 +48,7 @@ export async function GET(
clientCode: true,
episode: true,
sequence: true,
scene: true,
description: true,
status: true,
shotApprovalStatus: true,
@@ -124,9 +125,13 @@ export async function GET(
// code by convention ("UNG_106_010_020_cmp_TT_v004"). The internal code is
// not sent at all — there is nothing here for it to be useful for, and
// leaking it invites the client to quote it back at us.
shots: shots.map(({ generatedThumbnailUrl, clientCode, ...shot }) => ({
// The scene is our numbering too, and an alias does not have to share it
// (SNV's "SNV_101_0463_CP_VFX" is our scene 001), so an aliased shot goes
// out without one rather than with a number the client never used.
shots: shots.map(({ generatedThumbnailUrl, clientCode, scene, ...shot }) => ({
...shot,
shotCode: clientShotCode({ ...shot, clientCode }),
scene: clientShotCode({ ...shot, clientCode }) === shot.shotCode ? scene || null : null,
thumbnailUrl: shotThumbnail({ ...shot, generatedThumbnailUrl }),
tasks: shot.tasks.map((task) => ({
...task,