@@ -3,6 +3,7 @@ package handler
3
3
import (
4
4
"encoding/json"
5
5
"fmt"
6
+ "github.com/kataras/iris/v12/x/errors"
6
7
"log"
7
8
8
9
"github.com/kataras/iris/v12"
@@ -56,22 +57,8 @@ var SeasonRankScoreMap = map[string][]byte{
56
57
57
58
func RankListHandler (c iris.Context ) {
58
59
season := c .URLParam ("season" )
59
- completeFormKey := fmt .Sprintf ("complete_form_%s" , season )
60
60
rankScoreKey := fmt .Sprintf ("rank_score_%s" , season )
61
-
62
- var completeFormBytes []byte
63
- var completeFormRankBytes []byte
64
61
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
- }
75
62
if data , ok := SeasonRankScoreMap [season ]; ok {
76
63
rankScoreBytes = data
77
64
} else {
@@ -85,54 +72,13 @@ func RankListHandler(c iris.Context) {
85
72
return
86
73
}
87
74
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
133
80
}
134
-
135
- completeForm , ok := completeFormMap .(map [string ]CompleteForm )[schoolName ]
81
+ completeForm , ok := completeFormMap [schoolName ]
136
82
if ! ok {
137
83
c .StatusCode (404 )
138
84
c .JSON (iris.Map {"code" : - 1 , "msg" : "School not found" })
@@ -167,3 +113,67 @@ func RankListHandler(c iris.Context) {
167
113
CompleteForm : completeForm ,
168
114
})
169
115
}
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