Files
photo-live/packages/storage/src/keys.ts
T
2026-09-20 17:53:44 +08:00

36 lines
1.6 KiB
TypeScript

// packages/storage/src/keys.ts —— 对象键布局的跨服务权威段(P4a Task 3 起)。
// 此前 OBJECT_KEY_ROOT 在 api uploads/support.ts 与 worker publish.service.ts
// 各持一份字面量;水印引入第三处消费方(ov 公开侧模式键推导,无任何 DB 行可
// 依赖),收敛到存储包单一出处,杜绝多环境前缀化时(P5)三处漂移。
// P1a 单环境(env=dev)硬编码;多环境前缀化属 P5 部署事项。
/** 对象键根(与各 test/reset.ts 的 MinIO 清理前缀一致)。 */
export const OBJECT_KEY_ROOT = 'photo-live/dev';
/** photo_variants 变体名(与 db-cn photo_variants.variant 取值一致)。 */
export type PhotoVariantName = 'thumb' | 'browse' | 'watermark';
/** 变体对象键(worker 写入位 / ov 模式键推导位,同一实现)。 */
export function variantsObjectKey(
albumId: string,
photoId: string,
version: number,
variant: PhotoVariantName,
): string {
return `${OBJECT_KEY_ROOT}/albums/${albumId}/variants/${photoId}/${version}/${variant}.jpg`;
}
/**
* 水印变体键的便捷推导(P4a Task 3 ov 侧核心约定):键由 (albumId, photoId,
* configVersion) 确定性构成——ov 副本不逐照片同步变体键,公开侧按相册有效
* watermarkConfigVersion 直接推导(对象存在性由 cn 侧有效版本语义保证,见
* packages/contracts/src/watermark.ts)。
*/
export function watermarkVariantObjectKey(
albumId: string,
photoId: string,
configVersion: number,
): string {
return variantsObjectKey(albumId, photoId, configVersion, 'watermark');
}