You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
155 lines
3.7 KiB
155 lines
3.7 KiB
package model |
|
|
|
import ( |
|
"fmt" |
|
"time" |
|
) |
|
|
|
const ( |
|
// TotalScore of up rating |
|
TotalScore = 600 |
|
// LowerBoundScore ... |
|
LowerBoundScore = 240 |
|
) |
|
|
|
// Rating of up |
|
type Rating struct { |
|
Score *Score `json:"score"` |
|
Rank *Rank `json:"rank"` |
|
Prize *Prize `json:"prize"` |
|
Privileges []*Privilege `json:"privileges"` |
|
} |
|
|
|
// Score of rating |
|
type Score struct { |
|
MID int64 `json:"mid"` |
|
Magnetic int `json:"magnetic"` // 电磁力 |
|
Creative int `json:"creative"` // 创作力 |
|
Influence int `json:"influence"` // 影响力 |
|
Credit int `json:"credit"` // 信用分 |
|
CDate time.Time `json:"c_date"` // 统计月 |
|
StatStart time.Time `json:"stat_start"` // 统计周期开始日 |
|
StatEnd time.Time `json:"stat_end"` // 统计周期结束日 |
|
} |
|
|
|
// Rank of rating |
|
type Rank struct { |
|
Level RankLevel `json:"level"` |
|
Desc string `json:"desc"` |
|
} |
|
|
|
// RankLevel of rank |
|
type RankLevel int8 |
|
|
|
// RankLevel list |
|
const ( |
|
RankLevelSuper RankLevel = 10 * (1 + iota) |
|
RankLevelStrong |
|
RankLevelStandout |
|
RankLevelNormal |
|
RankLevelNone |
|
) |
|
|
|
// Ranks list all levels of rank |
|
var Ranks = []RankLevel{ |
|
RankLevelSuper, |
|
RankLevelStrong, |
|
RankLevelStandout, |
|
RankLevelNormal, |
|
RankLevelNone, |
|
} |
|
|
|
// rank meta info |
|
var rankMeta = map[RankLevel]struct { |
|
score int |
|
desc string |
|
}{ |
|
RankLevelSuper: {int(0.9 * TotalScore), "超能力"}, |
|
RankLevelStrong: {int(0.75 * TotalScore), "强能力"}, |
|
RankLevelStandout: {int(0.6 * TotalScore), "异能力"}, |
|
RankLevelNormal: {int(0.3 * TotalScore), "常能力"}, |
|
RankLevelNone: {0, "新能力"}, |
|
} |
|
|
|
// Score of rankLevel |
|
func (r RankLevel) Score() int { |
|
if m, ok := rankMeta[r]; ok { |
|
return m.score |
|
} |
|
return RankLevelNone.Score() |
|
} |
|
|
|
// Rank content of rankLevel |
|
func (r RankLevel) Rank() *Rank { |
|
if m, ok := rankMeta[r]; ok { |
|
return &Rank{ |
|
Level: r, |
|
Desc: m.desc, |
|
} |
|
} |
|
return RankLevelNone.Rank() |
|
} |
|
|
|
// Prize of rating |
|
type Prize struct { |
|
Level PrizeLevel `json:"level"` |
|
Desc string `json:"desc"` |
|
Content string `json:"content"` |
|
} |
|
|
|
// PrizeLevel of prize |
|
type PrizeLevel int8 |
|
|
|
// Prize Level List |
|
const ( |
|
PrizeLevelOne PrizeLevel = 10 * (1 + iota) |
|
PrizeLevelTwo |
|
PrizeLevelThree |
|
PrizeLevelFour |
|
PrizeLevelFive |
|
) |
|
|
|
// Prizes list prize levels by priority |
|
var Prizes = []PrizeLevel{ |
|
PrizeLevelOne, |
|
PrizeLevelTwo, |
|
PrizeLevelThree, |
|
PrizeLevelFour, |
|
PrizeLevelFive, |
|
} |
|
|
|
var prizeMeta = map[PrizeLevel]struct { |
|
desc string |
|
content func(arg ...interface{}) string |
|
}{ |
|
PrizeLevelOne: {desc: "睥睨众生奖", content: func(...interface{}) string { |
|
return "恭喜你获得超高的电磁力,那可真是会当临绝顶,一览众山小吖" |
|
}}, |
|
PrizeLevelTwo: {desc: "稳如泰山奖", content: func(...interface{}) string { |
|
return "稳如泰山是你的优点,也可能是你的天花板,试着努力突破一下吧" |
|
}}, |
|
PrizeLevelThree: {desc: "飞速进步奖", content: func(arg ...interface{}) string { |
|
return fmt.Sprintf("本月电磁力上升%d分,真是付出了超级多努力呢,请继续加油吧", arg[0]) |
|
}}, |
|
PrizeLevelFour: {desc: "特别有趣奖", content: func(...interface{}) string { |
|
return "看来你是被2233娘选中的孩子,希望这样的幸运能够继续支撑你努力" |
|
}}, |
|
PrizeLevelFive: {desc: "全村希望奖", content: func(...interface{}) string { |
|
return "作为全村的希望,未来的你一定会感谢现在持续努力的自己" |
|
}}, |
|
} |
|
|
|
// Prize constructor |
|
func (p PrizeLevel) Prize(arg ...interface{}) *Prize { |
|
if meta, ok := prizeMeta[p]; ok { |
|
return &Prize{ |
|
Level: p, |
|
Desc: meta.desc, |
|
Content: meta.content(arg...), |
|
} |
|
} |
|
return PrizeLevelFive.Prize(arg...) |
|
} |
|
|
|
// Privilege of rating |
|
type Privilege struct{}
|
|
|