fix: fallback to legacy keys for variant lookup

This commit is contained in:
William Valentin
2026-02-01 12:13:39 -08:00
parent 26e2d74d2b
commit 517e21d0b7
3 changed files with 71 additions and 17 deletions

View File

@@ -2,7 +2,7 @@ import { z } from "zod";
import { getDb } from "@tline/db";
import { presignGetObjectUrl } from "@tline/minio";
import { pickVariantKey } from "./variant";
import { pickLegacyKeyForRequest, pickVariantKey } from "./variant";
export const runtime = "nodejs";
@@ -13,6 +13,7 @@ const paramsSchema = z.object({
const legacyVariantSchema = z.enum(["original", "thumb_small", "thumb_med", "poster"]);
const kindSchema = z.enum(["original", "thumb", "poster", "video_mp4"]);
const sizeSchema = z.coerce.number().int().positive();
const videoMp4DefaultSize = 720;
const legacyVariantMap = {
original: { kind: "original" as const },
thumb_small: { kind: "thumb" as const, size: 256 },
@@ -53,14 +54,18 @@ export async function GET(
}
requestedKind = kindParsed.data;
if (requestedKind !== "original") {
const sizeParsed = sizeSchema.safeParse(sizeParam);
if (!sizeParsed.success) {
return Response.json(
{ error: "invalid_query", issues: sizeParsed.error.issues },
{ status: 400 },
);
if (requestedKind === "video_mp4" && !sizeParam) {
requestedSize = videoMp4DefaultSize;
} else {
const sizeParsed = sizeSchema.safeParse(sizeParam);
if (!sizeParsed.success) {
return Response.json(
{ error: "invalid_query", issues: sizeParsed.error.issues },
{ status: 400 },
);
}
requestedSize = sizeParsed.data;
}
requestedSize = sizeParsed.data;
}
} else if (legacyVariantParam) {
const legacyParsed = legacyVariantSchema.safeParse(legacyVariantParam);
@@ -113,14 +118,17 @@ export async function GET(
return Response.json({ error: "not_found" }, { status: 404 });
}
const legacyKey =
legacyVariant === "thumb_small"
? asset.thumb_small_key
: legacyVariant === "thumb_med"
? asset.thumb_med_key
: legacyVariant === "poster"
? asset.poster_key
: null;
const legacyKey = legacyVariant
? pickLegacyKeyForRequest(
{ asset },
{ kind: requestedKind, size: requestedSize ?? 0 },
)
: requestedSize !== null
? pickLegacyKeyForRequest(
{ asset },
{ kind: requestedKind, size: requestedSize },
)
: null;
const key =
requestedKind === "original"