go-common/app/interface/main/up-rating/model/rating.go

156 lines
3.7 KiB
Go
Raw Normal View History

2019-04-22 10:49:16 +00:00
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{}