feat: add asset variants table and URL selection
This commit is contained in:
@@ -205,6 +205,35 @@ async function uploadObject(input: {
|
||||
);
|
||||
}
|
||||
|
||||
async function upsertVariant(input: {
|
||||
assetId: string;
|
||||
kind: "thumb" | "poster" | "video_mp4";
|
||||
size: number;
|
||||
key: string;
|
||||
mimeType: string;
|
||||
width?: number | null;
|
||||
height?: number | null;
|
||||
}) {
|
||||
const db = getDb();
|
||||
await db`
|
||||
insert into asset_variants (asset_id, kind, size, key, mime_type, width, height)
|
||||
values (
|
||||
${input.assetId},
|
||||
${input.kind},
|
||||
${input.size},
|
||||
${input.key},
|
||||
${input.mimeType},
|
||||
${input.width ?? null},
|
||||
${input.height ?? null}
|
||||
)
|
||||
on conflict (asset_id, kind, size)
|
||||
do update set key = excluded.key,
|
||||
mime_type = excluded.mime_type,
|
||||
width = excluded.width,
|
||||
height = excluded.height
|
||||
`;
|
||||
}
|
||||
|
||||
async function getObjectLastModified(input: { bucket: string; key: string }): Promise<Date | null> {
|
||||
const s3 = getMinioInternalClient();
|
||||
const res = await s3.send(new HeadObjectCommand({ Bucket: input.bucket, Key: input.key }));
|
||||
@@ -424,6 +453,24 @@ export async function handleProcessAsset(raw: unknown) {
|
||||
filePath: thumb768Path,
|
||||
contentType: "image/jpeg",
|
||||
});
|
||||
await upsertVariant({
|
||||
assetId: asset.id,
|
||||
kind: "thumb",
|
||||
size: 256,
|
||||
key: thumb256Key,
|
||||
mimeType: "image/jpeg",
|
||||
width: typeof updates.width === "number" ? updates.width : null,
|
||||
height: typeof updates.height === "number" ? updates.height : null,
|
||||
});
|
||||
await upsertVariant({
|
||||
assetId: asset.id,
|
||||
kind: "thumb",
|
||||
size: 768,
|
||||
key: thumb768Key,
|
||||
mimeType: "image/jpeg",
|
||||
width: typeof updates.width === "number" ? updates.width : null,
|
||||
height: typeof updates.height === "number" ? updates.height : null,
|
||||
});
|
||||
updates.thumb_small_key = thumb256Key;
|
||||
updates.thumb_med_key = thumb768Key;
|
||||
} else if (asset.media_type === "video") {
|
||||
@@ -485,6 +532,15 @@ export async function handleProcessAsset(raw: unknown) {
|
||||
filePath: posterPath,
|
||||
contentType: "image/jpeg",
|
||||
});
|
||||
await upsertVariant({
|
||||
assetId: asset.id,
|
||||
kind: "poster",
|
||||
size: 256,
|
||||
key: posterKey,
|
||||
mimeType: "image/jpeg",
|
||||
width: typeof updates.width === "number" ? updates.width : null,
|
||||
height: typeof updates.height === "number" ? updates.height : null,
|
||||
});
|
||||
updates.poster_key = posterKey;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user