|
- package ratio_setting
-
- import (
- "encoding/json"
- "errors"
-
- "github.com/QuantumNous/new-api/common"
- "github.com/QuantumNous/new-api/setting/config"
- "github.com/QuantumNous/new-api/types"
- )
-
- var defaultGroupRatio = map[string]float64{
- "default": 1,
- "vip": 1,
- "svip": 1,
- }
-
- var groupRatioMap = types.NewRWMap[string, float64]()
-
- var defaultGroupGroupRatio = map[string]map[string]float64{
- "vip": {
- "edit_this": 0.9,
- },
- }
-
- var groupGroupRatioMap = types.NewRWMap[string, map[string]float64]()
-
- var defaultGroupSpecialUsableGroup = map[string]map[string]string{
- "vip": {
- "append_1": "vip_special_group_1",
- "-:remove_1": "vip_removed_group_1",
- },
- }
-
- type GroupRatioSetting struct {
- GroupRatio *types.RWMap[string, float64] `json:"group_ratio"`
- GroupGroupRatio *types.RWMap[string, map[string]float64] `json:"group_group_ratio"`
- GroupSpecialUsableGroup *types.RWMap[string, map[string]string] `json:"group_special_usable_group"`
- }
-
- var groupRatioSetting GroupRatioSetting
-
- func init() {
- groupSpecialUsableGroup := types.NewRWMap[string, map[string]string]()
- groupSpecialUsableGroup.AddAll(defaultGroupSpecialUsableGroup)
-
- groupRatioMap.AddAll(defaultGroupRatio)
- groupGroupRatioMap.AddAll(defaultGroupGroupRatio)
-
- groupRatioSetting = GroupRatioSetting{
- GroupSpecialUsableGroup: groupSpecialUsableGroup,
- GroupRatio: groupRatioMap,
- GroupGroupRatio: groupGroupRatioMap,
- }
-
- config.GlobalConfig.Register("group_ratio_setting", &groupRatioSetting)
- }
-
- func GetGroupRatioSetting() *GroupRatioSetting {
- if groupRatioSetting.GroupSpecialUsableGroup == nil {
- groupRatioSetting.GroupSpecialUsableGroup = types.NewRWMap[string, map[string]string]()
- groupRatioSetting.GroupSpecialUsableGroup.AddAll(defaultGroupSpecialUsableGroup)
- }
- return &groupRatioSetting
- }
-
- func GetGroupRatioCopy() map[string]float64 {
- return groupRatioMap.ReadAll()
- }
-
- func ContainsGroupRatio(name string) bool {
- _, ok := groupRatioMap.Get(name)
- return ok
- }
-
- func GroupRatio2JSONString() string {
- return groupRatioMap.MarshalJSONString()
- }
-
- func UpdateGroupRatioByJSONString(jsonStr string) error {
- return types.LoadFromJsonString(groupRatioMap, jsonStr)
- }
-
- func GetGroupRatio(name string) float64 {
- ratio, ok := groupRatioMap.Get(name)
- if !ok {
- common.SysLog("group ratio not found: " + name)
- return 1
- }
- return ratio
- }
-
- func GetGroupGroupRatio(userGroup, usingGroup string) (float64, bool) {
- gp, ok := groupGroupRatioMap.Get(userGroup)
- if !ok {
- return -1, false
- }
- ratio, ok := gp[usingGroup]
- if !ok {
- return -1, false
- }
- return ratio, true
- }
-
- func GroupGroupRatio2JSONString() string {
- return groupGroupRatioMap.MarshalJSONString()
- }
-
- func UpdateGroupGroupRatioByJSONString(jsonStr string) error {
- return types.LoadFromJsonString(groupGroupRatioMap, jsonStr)
- }
-
- func CheckGroupRatio(jsonStr string) error {
- checkGroupRatio := make(map[string]float64)
- err := json.Unmarshal([]byte(jsonStr), &checkGroupRatio)
- if err != nil {
- return err
- }
- for name, ratio := range checkGroupRatio {
- if ratio < 0 {
- return errors.New("group ratio must be not less than 0: " + name)
- }
- }
- return nil
- }
|