feat(features): 功能开放 - 增加自定义渠道开关

This commit is contained in:
MasterChiefCN committed 2026-08-15 13:25:50 +08:00
1 parent b2a7eef35d
commit f83ff03df3
16 files changed
+154 -30

No files matched your search

@@ -14,15 +14,17 @@ import (
const featureAvailabilitySettingKey = "feature_availability"
const (
FeatureShortDrama = "shortDrama"
FeatureTaskCenter = "taskCenter"
FeatureCredits = "credits"
FeatureShortDrama = "shortDrama"
FeatureTaskCenter = "taskCenter"
FeatureCredits = "credits"
FeatureCustomChannels = "customChannels"
)
type FeatureAvailability struct {
ShortDramaEnabled bool `json:"shortDramaEnabled"`
TaskCenterEnabled bool `json:"taskCenterEnabled"`
CreditsEnabled bool `json:"creditsEnabled"`
ShortDramaEnabled bool `json:"shortDramaEnabled"`
TaskCenterEnabled bool `json:"taskCenterEnabled"`
CreditsEnabled bool `json:"creditsEnabled"`
CustomChannelsEnabled bool `json:"customChannelsEnabled"`
}
type PublicFeatureAvailability struct {
@@ -35,7 +37,7 @@ type PublicFeatureAvailability struct {
func defaultFeatureAvailability() FeatureAvailability {
// 缺少配置代表尚未由运维接管,默认保持现有功能全部开放。
return FeatureAvailability{ShortDramaEnabled: true, TaskCenterEnabled: true, CreditsEnabled: true}
return FeatureAvailability{ShortDramaEnabled: true, TaskCenterEnabled: true, CreditsEnabled: true, CustomChannelsEnabled: true}
}
func (s *Service) FeatureAvailability() (*PublicFeatureAvailability, error) {
@@ -90,6 +92,8 @@ func (s *Service) FeatureEnabled(feature string) (bool, error) {
return value.TaskCenterEnabled, nil
case FeatureCredits:
return value.CreditsEnabled, nil
case FeatureCustomChannels:
return value.CustomChannelsEnabled, nil
default:
return false, errors.New("未知功能开放配置")
}
@@ -110,6 +114,8 @@ func (s *Service) RequireFeature(feature string) error {
return Forbidden("任务中心暂未开放")
case FeatureCredits:
return Forbidden("积分功能暂未开放")
case FeatureCustomChannels:
return Forbidden("自定义渠道暂未开放")
default:
return Forbidden("该功能暂未开放")
}
@@ -123,7 +129,8 @@ func (s *Service) readFeatureAvailability() (*model.SystemSetting, FeatureAvaila
if err != nil {
return nil, FeatureAvailability{}, err
}
value := FeatureAvailability{}
// 以全开放默认值为基底,避免已有三字段配置在升级后因缺少新字段而意外关闭功能。
value := defaultFeatureAvailability()
if strings.TrimSpace(setting.ValueJSON) == "" || json.Unmarshal([]byte(setting.ValueJSON), &value) != nil {
return nil, FeatureAvailability{}, errors.New("功能开放配置格式无效")
}