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 }