@@ -2,6 +2,7 @@ package card
|
2 | 2 |
|
3 | 3 | import (
|
4 | 4 | "bytes"
|
| 5 | +"fmt" |
5 | 6 | "text/template"
|
6 | 7 |
|
7 | 8 | ".com/pkg/errors"
|
@@ -10,7 +11,7 @@ import (
|
10 | 11 | ".com/haozibi/leetcode-badge/internal/statics"
|
11 | 12 | )
|
12 | 13 |
|
13 |
| -func Build(data *models.UserQuestionPrecess) ([]byte, error) { |
| 14 | +func QuestionProcess(name string, data *models.UserQuestionPrecess) ([]byte, error) { |
14 | 15 | var (
|
15 | 16 | baseLen = 215
|
16 | 17 | )
|
@@ -19,49 +20,83 @@ func Build(data *models.UserQuestionPrecess) ([]byte, error) {
|
19 | 20 | return int(float64(baseLen) * (float64(num) / float64(total)))
|
20 | 21 | }
|
21 | 22 |
|
22 |
| -info := Info{ |
| 23 | +info := QuestionProcessInfo{ |
| 24 | +Name: name, |
| 25 | + |
23 | 26 | BaseLen: baseLen,
|
24 | 27 | EasyLen: getLen(data.Easy.AcceptedNum, data.Easy.TotalNum),
|
25 | 28 | MediumLen: getLen(data.Medium.AcceptedNum, data.Medium.TotalNum),
|
26 | 29 | HardLen: getLen(data.Hard.AcceptedNum, data.Hard.TotalNum),
|
27 | 30 |
|
28 |
| -EasyNum: data.Easy.AcceptedNum, |
| 31 | +EasyNum: fmt.Sprintf("% 4d", data.Easy.AcceptedNum), |
29 | 32 | EasyTotal: data.Easy.TotalNum,
|
30 |
| -MediumNum: data.Medium.AcceptedNum, |
| 33 | +MediumNum: fmt.Sprintf("% 4d", data.Medium.AcceptedNum), |
31 | 34 | MediumTotal: data.Medium.TotalNum,
|
32 |
| -HardNum: data.Hard.AcceptedNum, |
| 35 | +HardNum: fmt.Sprintf("% 4d", data.Hard.AcceptedNum), |
33 | 36 | HardTotal: data.Hard.TotalNum,
|
34 | 37 |
|
35 | 38 | AcceptNum: data.Overview.AcceptedNum,
|
36 | 39 | }
|
37 | 40 |
|
38 |
| -t, err := template.New("foo").Parse(string(statics.TemplateQuestionProcess())) |
| 41 | +return build(statics.TemplateQuestionProcess(), info) |
| 42 | +} |
| 43 | + |
| 44 | +func ContestRanking(name string, data *models.UserContestRankingInfo) ([]byte, error) { |
| 45 | +info := ContestRankingInfo{ |
| 46 | +Name: name, |
| 47 | +Rating: fmt.Sprintf("%d", int(data.Rating)), |
| 48 | +LocalRanking: fmt.Sprintf("% 6d", data.LocalRanking), |
| 49 | +GlobalRanking: fmt.Sprintf("% 6d", data.GlobalRanking), |
| 50 | + |
| 51 | +LocalTotal: fmt.Sprintf("/%d", data.LocalTotalParticipants), |
| 52 | +GlobalTotal: fmt.Sprintf("/%d", data.GlobalTotalParticipants), |
| 53 | + |
| 54 | +Top: fmt.Sprintf("%0.2f", 100.0-data.TopPercentage), |
| 55 | +} |
| 56 | +return build(statics.TemplateContestRanking(), info) |
| 57 | +} |
| 58 | + |
| 59 | +func build(temp []byte, data interface{}) ([]byte, error) { |
| 60 | +t, err := template.New("foo").Parse(string(temp)) |
39 | 61 | if err != nil {
|
40 | 62 | return nil, errors.WithStack(err)
|
41 | 63 | }
|
42 | 64 |
|
43 | 65 | buf := bytes.NewBuffer(nil)
|
44 |
| -err = t.Execute(buf, info) |
| 66 | +err = t.Execute(buf, data) |
45 | 67 | if err != nil {
|
46 | 68 | return nil, errors.WithStack(err)
|
47 | 69 | }
|
48 | 70 |
|
49 | 71 | return buf.Bytes(), nil
|
50 | 72 | }
|
51 | 73 |
|
52 |
| -type Info struct { |
| 74 | +type ContestRankingInfo struct { |
| 75 | +Name string |
| 76 | +Rating string |
| 77 | +LocalRanking string |
| 78 | +GlobalRanking string |
| 79 | + |
| 80 | +LocalTotal string |
| 81 | +GlobalTotal string |
| 82 | + |
| 83 | +Top string |
| 84 | +} |
| 85 | + |
| 86 | +type QuestionProcessInfo struct { |
| 87 | +Name string |
53 | 88 | // 长度
|
54 | 89 | BaseLen int
|
55 | 90 | EasyLen int
|
56 | 91 | MediumLen int
|
57 | 92 | HardLen int
|
58 | 93 |
|
59 | 94 | // 数量
|
60 |
| -EasyNum int |
| 95 | +EasyNum string |
61 | 96 | EasyTotal int
|
62 |
| -MediumNum int |
| 97 | +MediumNum string |
63 | 98 | MediumTotal int
|
64 |
| -HardNum int |
| 99 | +HardNum string |
65 | 100 | HardTotal int
|
66 | 101 |
|
67 | 102 | AcceptNum int
|
|
0 commit comments