feat(metadata): field-level episode metadata, titleZh and refresh?full=1 (MD-1)

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
rootandClaude Opus 5.5 committed 2026-09-29 17:28:16 +08:00
1 parent fc1856c2e3
commit 9cd5a28943
12 files changed
+1104 -27

No files matched your search

+47
View File
@@ -198,9 +198,56 @@ export const EntityMetadataField = z.enum([
"episodeCount",
"genres",
"posterUrl",
// MD-1 TMDB 详情(对照 MP 媒体详情):中文名、标语、最近播出、状态、评分、时长、季数、主创、外部 ID
"titleZh",
"tagline",
"lastAirDate",
"airStatus",
"voteAverage",
"voteCount",
"runtime",
"seasonCount",
"cast",
"crew",
"externalIds",
]);
export type EntityMetadataField = z.infer<typeof EntityMetadataField>;
/**
* 内容单元(季 / 集)可覆盖 / 锁定的字段(MD-1):来源值写 metadata_field(content_unit_id),
* 最终值投影到 content_unit.metadata;name → title 列、airDate → air_date 列。编号不属于元数据。
*/
export const UnitMetadataField = z.enum([
"name",
"overview",
"airDate",
"runtime",
"stillPath",
"posterPath",
"voteAverage",
"voteCount",
]);
export type UnitMetadataField = z.infer<typeof UnitMetadataField>;
/** 主创(cast / crew 字段的元素):TMDB 人物 ID、姓名(按回退链语言)、角色或职务、头像路径(经图片代理显示) */
export const MediaCredit = z.object({
id: z.number().int(),
name: z.string(),
originalName: z.string().nullable(),
/** 演员:角色名;幕后:职务(Director / Creator …) */
role: z.string().nullable(),
profilePath: z.string().nullable(),
});
export type MediaCredit = z.infer<typeof MediaCredit>;
/** externalIds 字段的值 */
export const MediaExternalIds = z.object({
imdb: z.string().nullable(),
tvdb: z.string().nullable(),
wikidata: z.string().nullable(),
});
export type MediaExternalIds = z.infer<typeof MediaExternalIds>;
export const FieldOverrideInput = z.object({
value: z.unknown(),
lock: z.boolean().default(true),