Skip to content

Commit 121912c

Browse files
committed
refactor: streamline complete form retrieval and error handling in RankListHandler
1 parent 30c6b7c commit 121912c

File tree

1 file changed

+71
-61
lines changed

1 file changed

+71
-61
lines changed

internal/handler/rank_list.go

Lines changed: 71 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package handler
33
import (
44
"encoding/json"
55
"fmt"
6+
"github.com/kataras/iris/v12/x/errors"
67
"log"
78

89
"github.com/kataras/iris/v12"
@@ -56,22 +57,8 @@ var SeasonRankScoreMap = map[string][]byte{
5657

5758
func RankListHandler(c iris.Context) {
5859
season := c.URLParam("season")
59-
completeFormKey := fmt.Sprintf("complete_form_%s", season)
6060
rankScoreKey := fmt.Sprintf("rank_score_%s", season)
61-
62-
var completeFormBytes []byte
63-
var completeFormRankBytes []byte
6461
var rankScoreBytes []byte
65-
if data, ok := SeasonCompleteFormMap[season]; ok {
66-
completeFormBytes = data
67-
} else {
68-
completeFormBytes = static.CompleteFormBytes
69-
}
70-
if data, ok := SeasonCompleteFormRankMap[season]; ok {
71-
completeFormRankBytes = data
72-
} else {
73-
completeFormRankBytes = static.CompleteFormRankBytes
74-
}
7562
if data, ok := SeasonRankScoreMap[season]; ok {
7663
rankScoreBytes = data
7764
} else {
@@ -85,54 +72,13 @@ func RankListHandler(c iris.Context) {
8572
return
8673
}
8774

88-
completeFormMap, ok := svc.Cache.Get(completeFormKey)
89-
if !ok {
90-
completeFormJson := make([]CompleteForm, 0)
91-
err := json.Unmarshal(completeFormBytes, &completeFormJson)
92-
if err != nil {
93-
log.Printf("Failed to parse complete form: %v\n", err)
94-
c.StatusCode(500)
95-
c.JSON(iris.Map{"code": -1, "msg": "Failed to parse complete form"})
96-
return
97-
}
98-
99-
if len(completeFormRankBytes) != 0 {
100-
// 有完整形态排名
101-
completeFormRankJson := make([]CompleteFormRank, 0)
102-
err = json.Unmarshal(completeFormRankBytes, &completeFormRankJson)
103-
if err != nil {
104-
log.Printf("Failed to parse complete form rank: %v\n", err)
105-
c.StatusCode(500)
106-
c.JSON(iris.Map{"code": -1, "msg": "Failed to parse complete form rank"})
107-
return
108-
}
109-
completeFormRankMap := make(map[string]CompleteFormRank)
110-
for _, item := range completeFormRankJson {
111-
completeFormRankMap[item.School] = item
112-
}
113-
for i, item := range completeFormJson {
114-
if rankItem, ok := completeFormRankMap[item.School]; ok {
115-
completeFormJson[i].Rank = rankItem.Rank
116-
}
117-
}
118-
} else {
119-
// 无完整形态排名 按照金币数量计算
120-
// 并列名次处理
121-
var rank int
122-
var lastCoinTotal int
123-
for i := range completeFormJson {
124-
if completeFormJson[i].InitialCoinTotal != lastCoinTotal {
125-
rank = i + 1
126-
}
127-
completeFormJson[i].Rank = rank
128-
lastCoinTotal = completeFormJson[i].InitialCoinTotal
129-
}
130-
}
131-
completeFormMap = lo.SliceToMap(completeFormJson, func(item CompleteForm) (string, CompleteForm) { return item.School, item })
132-
svc.Cache.Set(completeFormKey, completeFormMap, cache.NoExpiration)
75+
completeFormMap, err := GetCompleteFormMap(season)
76+
if err != nil {
77+
c.StatusCode(500)
78+
c.JSON(iris.Map{"code": -1, "msg": "Failed to get complete form"})
79+
return
13380
}
134-
135-
completeForm, ok := completeFormMap.(map[string]CompleteForm)[schoolName]
81+
completeForm, ok := completeFormMap[schoolName]
13682
if !ok {
13783
c.StatusCode(404)
13884
c.JSON(iris.Map{"code": -1, "msg": "School not found"})
@@ -167,3 +113,67 @@ func RankListHandler(c iris.Context) {
167113
CompleteForm: completeForm,
168114
})
169115
}
116+
117+
// GetCompleteFormMap 获取完整形态
118+
func GetCompleteFormMap(season string) (map[string]CompleteForm, error) {
119+
completeFormKey := fmt.Sprintf("complete_form_%s", season)
120+
ret, ok := svc.Cache.Get(completeFormKey)
121+
if ok {
122+
return ret.(map[string]CompleteForm), nil
123+
}
124+
125+
var completeFormBytes []byte
126+
var completeFormRankBytes []byte
127+
if data, ok := SeasonCompleteFormMap[season]; ok {
128+
completeFormBytes = data
129+
} else {
130+
completeFormBytes = static.CompleteFormBytes
131+
}
132+
if data, ok := SeasonCompleteFormRankMap[season]; ok {
133+
completeFormRankBytes = data
134+
} else {
135+
completeFormRankBytes = static.CompleteFormRankBytes
136+
}
137+
138+
completeFormJson := make([]CompleteForm, 0)
139+
err := json.Unmarshal(completeFormBytes, &completeFormJson)
140+
if err != nil {
141+
log.Printf("Failed to parse complete form: %v\n", err)
142+
return nil, errors.New("Failed to parse complete form")
143+
}
144+
145+
if len(completeFormRankBytes) != 0 {
146+
// 有完整形态排名
147+
completeFormRankJson := make([]CompleteFormRank, 0)
148+
err = json.Unmarshal(completeFormRankBytes, &completeFormRankJson)
149+
if err != nil {
150+
log.Printf("Failed to parse complete form rank: %v\n", err)
151+
return nil, errors.New("Failed to parse complete form rank")
152+
}
153+
completeFormRankMap := make(map[string]CompleteFormRank)
154+
for _, item := range completeFormRankJson {
155+
completeFormRankMap[item.School] = item
156+
}
157+
for i, item := range completeFormJson {
158+
if rankItem, ok := completeFormRankMap[item.School]; ok {
159+
completeFormJson[i].Rank = rankItem.Rank
160+
}
161+
}
162+
} else {
163+
// 无完整形态排名 按照金币数量计算
164+
// 并列名次处理
165+
var rank int
166+
var lastCoinTotal int
167+
for i := range completeFormJson {
168+
if completeFormJson[i].InitialCoinTotal != lastCoinTotal {
169+
rank = i + 1
170+
}
171+
completeFormJson[i].Rank = rank
172+
lastCoinTotal = completeFormJson[i].InitialCoinTotal
173+
}
174+
}
175+
completeFormMap := lo.SliceToMap(completeFormJson, func(item CompleteForm) (string, CompleteForm) { return item.School, item })
176+
svc.Cache.Set(completeFormKey, completeFormMap, cache.NoExpiration)
177+
178+
return completeFormMap, nil
179+
}

0 commit comments

Comments
 (0)