Initial commit

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-15 13:57:10 +08:00
co-authored by Claude Opus 5
commit 8679200f41
1897 changed files with 257900 additions and 0 deletions
+89
View File
@@ -0,0 +1,89 @@
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
}