Files
web_hgtv_server/app/service/playletser/slug.go
T
2026-10-24 11:22:21 +08:00

105 lines
3.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package playletser
import (
"context"
"strings"
"videoweb/app/service/playletcache"
"videoweb/pub/common/srvdef"
"videoweb/pub/models/playletcategorymod"
"videoweb/pub/models/playletmod"
"videoweb/pub/models/playlettagmod"
"videoweb/pub/models/playletthememod"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/mongo/options"
)
// resolvePlayletID 解析短剧ID:slug 非空时先按 slug 查 ID,命中失败回退 oldSlugs 兼容旧链接;否则使用传入 ID。
func resolvePlayletID(ctx context.Context, id int64, slug string, required bool) (int64, *srvdef.SrvErr) {
slug = strings.TrimSpace(slug)
if slug != "" {
item, err := playletmod.FindOnePlaylet(ctx, bson.M{
"$or": []bson.M{
{playletmod.FN.Playlet.Slug: slug},
{playletmod.FN.Playlet.OldSlugs: slug},
},
}, options.FindOne().SetProjection(bson.D{
{Key: playletmod.FN.Playlet.Id, Value: 1},
}))
if err != nil {
return 0, err
}
return item.Id, nil
}
if required && id <= 0 {
return 0, srvdef.New(srvdef.ErrParamError, "短剧ID不能为空", "短剧ID不能为空")
}
return id, nil
}
// resolveThemeID 解析题材ID:slug 非空时先按 slug 查 ID,否则使用传入 ID(0 表示不按题材筛选)。
func resolveThemeID(ctx context.Context, id int64, slug string) (int64, *srvdef.SrvErr) {
slug = strings.TrimSpace(slug)
if slug == "" {
return id, nil
}
if item := playletcache.GetThemeBySlug(slug); item != nil {
return item.Id, nil
}
theme, err := playletthememod.FindOnePlayletTheme(ctx, bson.M{
playletthememod.FN.PlayletTheme.Slug: slug,
}, options.FindOne().SetProjection(bson.D{
{Key: playletthememod.FN.PlayletTheme.Id, Value: 1},
}))
if err != nil {
return 0, err
}
return theme.Id, nil
}
// resolveTagID 解析标签ID:slug 非空时先按 slug 查 ID,否则使用传入 ID。
func resolveTagID(ctx context.Context, id int64, slug string) (int64, *srvdef.SrvErr) {
slug = strings.TrimSpace(slug)
if slug != "" {
if item := playletcache.GetTagBySlug(slug); item != nil {
return item.Id, nil
}
tag, err := playlettagmod.FindOnePlayletTag(ctx, bson.M{
playlettagmod.FN.PlayletTag.Slug: slug,
}, options.FindOne().SetProjection(bson.D{
{Key: playlettagmod.FN.PlayletTag.Id, Value: 1},
}))
if err != nil {
return 0, err
}
return tag.Id, nil
}
if id <= 0 {
return 0, srvdef.New(srvdef.ErrParamError, "标签ID不能为空", "标签ID不能为空")
}
return id, nil
}
// resolveCategoryID 解析分类ID:slug 非空时先按 slug 查 ID,否则使用传入 ID。
func resolveCategoryID(ctx context.Context, id int64, slug string) (int64, *srvdef.SrvErr) {
slug = strings.TrimSpace(slug)
if slug != "" {
if item := playletcache.GetCategoryBySlug(slug); item != nil {
return item.Id, nil
}
category, err := playletcategorymod.FindOnePlayletCategory(ctx, bson.M{
playletcategorymod.FN.PlayletCategory.Slug: slug,
}, options.FindOne().SetProjection(bson.D{
{Key: playletcategorymod.FN.PlayletCategory.Id, Value: 1},
}))
if err != nil {
return 0, err
}
return category.Id, nil
}
if id <= 0 {
return 0, srvdef.New(srvdef.ErrParamError, "分类ID无效", "分类ID无效")
}
return id, nil
}