Skip to content

Commit f1a6d9e

Browse files
committed
feat: add complete form ranking data and update related functionality
1 parent 819e322 commit f1a6d9e

File tree

5 files changed

+632
-8
lines changed

5 files changed

+632
-8
lines changed

internal/handler/rank_list.go

Lines changed: 46 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,23 +35,39 @@ type CompleteForm struct {
3535
InitialCoinTotal int `json:"initialCoinTotal"`
3636
}
3737

38+
type CompleteFormRank struct {
39+
Rank int `json:"rank"`
40+
School string `json:"school"`
41+
Team string `json:"team"`
42+
}
43+
3844
var SeasonCompleteFormMap = map[string][]byte{
3945
"2024": static.CompleteFormBytes2024,
4046
}
4147

48+
var SeasonCompleteFormRankMap = map[string][]byte{
49+
"2024": {},
50+
}
51+
4252
var SeasonRankScoreMap = map[string][]byte{
4353
"2024": static.RankScoreBytes2024,
4454
}
4555

4656
func RankListHandler(c iris.Context) {
4757
season := c.URLParam("season")
4858
var completeFormBytes []byte
59+
var completeFormRankBytes []byte
4960
var rankScoreBytes []byte
5061
if data, ok := SeasonCompleteFormMap[season]; ok {
5162
completeFormBytes = data
5263
} else {
5364
completeFormBytes = static.CompleteFormBytes
5465
}
66+
if data, ok := SeasonCompleteFormRankMap[season]; ok {
67+
completeFormRankBytes = data
68+
} else {
69+
completeFormRankBytes = static.CompleteFormRankBytes
70+
}
5571
if data, ok := SeasonRankScoreMap[season]; ok {
5672
rankScoreBytes = data
5773
} else {
@@ -76,15 +92,37 @@ func RankListHandler(c iris.Context) {
7692
return
7793
}
7894

79-
// 并列名次处理
80-
var rank int
81-
var lastCoinTotal int
82-
for i := range completeFormJson {
83-
if completeFormJson[i].InitialCoinTotal != lastCoinTotal {
84-
rank = i + 1
95+
if len(completeFormRankBytes) != 0 {
96+
// 有完整形态排名
97+
completeFormRankJson := make([]CompleteFormRank, 0)
98+
err = json.Unmarshal(completeFormRankBytes, &completeFormRankJson)
99+
if err != nil {
100+
log.Printf("Failed to parse complete form rank: %v\n", err)
101+
c.StatusCode(500)
102+
c.JSON(iris.Map{"code": -1, "msg": "Failed to parse complete form rank"})
103+
return
104+
}
105+
completeFormRankMap := make(map[string]CompleteFormRank)
106+
for _, item := range completeFormRankJson {
107+
completeFormRankMap[item.School] = item
108+
}
109+
for i, item := range completeFormJson {
110+
if rankItem, ok := completeFormRankMap[item.School]; ok {
111+
completeFormJson[i].Rank = rankItem.Rank
112+
}
113+
}
114+
} else {
115+
// 无完整形态排名 按照金币数量计算
116+
// 并列名次处理
117+
var rank int
118+
var lastCoinTotal int
119+
for i := range completeFormJson {
120+
if completeFormJson[i].InitialCoinTotal != lastCoinTotal {
121+
rank = i + 1
122+
}
123+
completeFormJson[i].Rank = rank
124+
lastCoinTotal = completeFormJson[i].InitialCoinTotal
85125
}
86-
completeFormJson[i].Rank = rank
87-
lastCoinTotal = completeFormJson[i].InitialCoinTotal
88126
}
89127
completeFormMap = lo.SliceToMap(completeFormJson, func(item CompleteForm) (string, CompleteForm) { return item.School, item })
90128
svc.Cache.Set("complete_form", completeFormMap, cache.NoExpiration)

0 commit comments

Comments
 (0)