短剧 Description 与 SeoInfo.Description 存同一份合并值

- 写入前先剥离历史/当前模板得到纯自定义, 再拼接当前模板
- 同一份 merged 值同时落 Playlet.Description 和 SeoInfo.Description
- 重复保存通过 stripPlayletSeoAutoTemplate 保证不会堆叠

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-11-11 17:25:07 +08:00
co-authored by Claude Opus 4.7
parent bf623eaea4
commit dd5fac099f
+11 -7
View File
@@ -1670,9 +1670,12 @@ func applyPlayletDescription(doc *playletmod.Playlet) {
if autoDesc == "" {
return
}
// SeoInfo.Description 存纯自定义(用户没传时为空);Playlet.Description 存合并后的展示值。
doc.SeoInfo.Description = stripPlayletSeoAutoTemplate(doc.SeoInfo.Description, autoDesc)
doc.Description = mergePlayletSeoDescription(doc.SeoInfo.Description, autoDesc)
// 先剥离历史模板,得到纯自定义,再拼接当前模板,同一份合并值同时写入
// Playlet.Description 和 SeoInfo.Description,保证两个字段始终一致。
custom := stripPlayletSeoAutoTemplate(doc.SeoInfo.Description, autoDesc)
merged := mergePlayletSeoDescription(custom, autoDesc)
doc.Description = merged
doc.SeoInfo.Description = merged
}
func applyPlayletDescriptionOnUpdate(exist *playletmod.Playlet, req *proto.PlayletUpdateReq, setDoc bson.M) {
@@ -1704,11 +1707,12 @@ func applyPlayletDescriptionOnUpdate(exist *playletmod.Playlet, req *proto.Playl
}
}
seo = normalizeSeoValue(seo)
// 剥离历史/当前版本的自动模板,仅保留纯自定义部分落到 SeoInfo.Description。
seo.Description = stripPlayletSeoAutoTemplate(seo.Description, autoDesc)
// 先剥离历史/当前模板得到纯自定义,再拼接当前模板,同一份合并值写入两个字段。
custom := stripPlayletSeoAutoTemplate(seo.Description, autoDesc)
merged := mergePlayletSeoDescription(custom, autoDesc)
seo.Description = merged
setDoc["seoInfo"] = seo
// Playlet.Description = 自定义 + 自动模板,供前台 SEO 页面渲染。
setDoc[playletmod.FN.Playlet.Description] = mergePlayletSeoDescription(seo.Description, autoDesc)
setDoc[playletmod.FN.Playlet.Description] = merged
}
func playletToWebResp(item *playletmod.Playlet, themeNameMap map[int64]string, tagNameMap map[int64]string, categoryId *int64) *proto.PlayletListResp {