90 lines
2.5 KiB
Go
90 lines
2.5 KiB
Go
package dramatopic
|
|
|
|
import (
|
|
"strings"
|
|
"time"
|
|
|
|
"91porn-server/models/cache/sysconfdata"
|
|
"91porn-server/models/v/moduleconfmod"
|
|
"91porn-server/models/v/sysconfmod"
|
|
|
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
|
)
|
|
|
|
const (
|
|
TypeSystem = "SYSTEM"
|
|
TypeCustom = "CUSTOM"
|
|
|
|
IDHot = "hot_recommend"
|
|
IDLatest = "latest"
|
|
IDEveryone = "everyone_likes"
|
|
|
|
KeyHot = "HOT_RECOMMEND"
|
|
KeyLatest = "LATEST"
|
|
KeyEveryone = "EVERYONE_LIKES"
|
|
)
|
|
|
|
type SystemTopic struct {
|
|
ID string
|
|
Name string
|
|
SystemKey string
|
|
Sort int
|
|
VCode sysconfmod.VCode
|
|
TieOrder int
|
|
}
|
|
|
|
func SystemTopics() []SystemTopic {
|
|
defaults := map[sysconfmod.VCode]int{
|
|
sysconfmod.VCodeDramaTopicHotSort: 500,
|
|
sysconfmod.VCodeDramaTopicLatestSort: 400,
|
|
sysconfmod.VCodeDramaTopicEveryoneSort: 300,
|
|
}
|
|
values, err := sysconfdata.GetIntsFromSharedCache(defaults)
|
|
if err != nil {
|
|
values = defaults
|
|
}
|
|
topics := []SystemTopic{
|
|
{ID: IDHot, Name: "热门推荐", SystemKey: KeyHot, Sort: values[sysconfmod.VCodeDramaTopicHotSort], VCode: sysconfmod.VCodeDramaTopicHotSort, TieOrder: 3},
|
|
{ID: IDLatest, Name: "最新上架", SystemKey: KeyLatest, Sort: values[sysconfmod.VCodeDramaTopicLatestSort], VCode: sysconfmod.VCodeDramaTopicLatestSort, TieOrder: 2},
|
|
{ID: IDEveryone, Name: "大家爱看", SystemKey: KeyEveryone, Sort: values[sysconfmod.VCodeDramaTopicEveryoneSort], VCode: sysconfmod.VCodeDramaTopicEveryoneSort, TieOrder: 1},
|
|
}
|
|
return topics
|
|
}
|
|
|
|
func FindSystem(id string) (SystemTopic, bool) {
|
|
for _, topic := range SystemTopics() {
|
|
if topic.ID == id {
|
|
return topic, true
|
|
}
|
|
}
|
|
return SystemTopic{}, false
|
|
}
|
|
|
|
// ModuleID returns the configured hot-drama module that owns custom topics.
|
|
// It follows the same compatibility fallback as the short-drama channel.
|
|
func ModuleID(now time.Time) (primitive.ObjectID, bool, error) {
|
|
modules, err := moduleconfmod.GetModuleConfByType(moduleconfmod.Drama)
|
|
if err != nil {
|
|
return primitive.NilObjectID, false, err
|
|
}
|
|
active := make([]moduleconfmod.ModuleConf, 0, len(modules))
|
|
for _, module := range modules {
|
|
if module.IsActiveAt(now) {
|
|
active = append(active, module)
|
|
}
|
|
}
|
|
for _, module := range active {
|
|
name := strings.ToLower(strings.TrimSpace(module.ModuleName + " " + module.SubModuleName))
|
|
if strings.Contains(name, "热门") || strings.Contains(name, "hot") {
|
|
return module.ID, true, nil
|
|
}
|
|
}
|
|
if len(active) > 1 {
|
|
return active[1].ID, true, nil
|
|
}
|
|
if len(active) == 1 {
|
|
return active[0].ID, true, nil
|
|
}
|
|
return primitive.NilObjectID, false, nil
|
|
}
|