105 lines
3.2 KiB
Go
105 lines
3.2 KiB
Go
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
|
||
}
|