feat: add object storage and points leaderboard

This commit is contained in:
richjohnrambo
2026-10-18 18:11:34 +08:00
parent bce5edfaf5
commit b79b781f15
24 changed files with 359 additions and 212 deletions
+6 -6
View File
@@ -110,11 +110,11 @@ type MemberLevel struct {
}
type LeaderboardEntry struct {
Rank int `json:"rank"`
Username string `json:"username"`
AvatarURL string `json:"avatar_url"`
CompletedCount int64 `json:"completed_count"`
Status string `json:"status"`
Rank int `json:"rank"`
Username string `json:"username"`
AvatarURL string `json:"avatar_url"`
ClaimedPoints int64 `json:"claimed_points"`
Status string `json:"status"`
}
type CustomerService struct {
@@ -287,7 +287,7 @@ func (s *Service) Leaderboard(ctx context.Context, tenantID int64) ([]Leaderboar
items := make([]LeaderboardEntry, 0, len(rows))
for index, row := range rows {
items = append(items, LeaderboardEntry{Rank: index + 1, Username: maskedUsername(row.Username),
AvatarURL: row.AvatarURL, CompletedCount: row.CompletedCount, Status: "领取成功"})
AvatarURL: row.AvatarURL, ClaimedPoints: row.ClaimedPoints, Status: "领取成功"})
}
return items, nil
}
+3 -3
View File
@@ -153,15 +153,15 @@ func TestHomeUsesSettledSummaryAndSnakeCaseJSON(t *testing.T) {
func TestLeaderboardMasksUsernameAndAddsRank(t *testing.T) {
service := New(fakeRepository{leaders: []store.LeaderboardMember{
{MemberID: 7, Username: "风轻云淡", CompletedCount: 12},
{MemberID: 8, Username: "李明", CompletedCount: 9},
{MemberID: 7, Username: "风轻云淡", ClaimedPoints: 125800},
{MemberID: 8, Username: "李明", ClaimedPoints: 96000},
}})
items, err := service.Leaderboard(context.Background(), 1)
if err != nil {
t.Fatal(err)
}
if len(items) != 2 || items[0].Rank != 1 || items[0].Username != "风***淡" ||
items[1].Username != "李*" || items[1].Status != "领取成功" {
items[0].ClaimedPoints != 125800 || items[1].Username != "李*" || items[1].Status != "领取成功" {
t.Fatalf("unexpected leaderboard: %+v", items)
}
}