-
Notifications
You must be signed in to change notification settings - Fork 30
/
Copy pathBadge.go
59 lines (51 loc) · 1.99 KB
/
Badge.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package connect
import (
"fmt"
)
// Badge describes a badge.
type Badge struct {
ID int `json:"badgeId"`
Key string `json:"badgeKey"`
Name string `json:"badgeName"`
CategoryID int `json:"badgeCategoryId"`
DifficultyID int `json:"badgeDifficultyId"`
Points int `json:"badgePoints"`
TypeID []int `json:"badgeTypeIds"`
SeriesID int `json:"badgeSeriesId"`
Start Time `json:"badgeStartDate"`
End Time `json:"badgeEndDate"`
UserProfileID int `json:"userProfileId"`
FullName string `json:"fullName"`
DisplayName string `json:"displayName"`
EarnedDate Time `json:"badgeEarnedDate"`
EarnedNumber int `json:"badgeEarnedNumber"`
Viewed bool `json:"badgeIsViewed"`
Progress float64 `json:"badgeProgressValue"`
Target float64 `json:"badgeTargetValue"`
UnitID int `json:"badgeUnitId"`
BadgeAssocTypeID int `json:"badgeAssocTypeId"`
BadgeAssocDataID string `json:"badgeAssocDataId"`
BadgeAssocDataName string `json:"badgeAssocDataName"`
EarnedByMe bool `json:"earnedByMe"`
RelatedBadges []Badge `json:"relatedBadges"`
Connections []Badge `json:"connections"`
}
// BadgeDetail will return details about a badge.
func (c *Client) BadgeDetail(badgeID int) (*Badge, error) {
// Alternative URL:
// https://connect.garmin.com/modern/proxy/badge-service/badge/DISPLAYNAME/earned/detail/BADGEID
URL := fmt.Sprintf("https://connect.garmin.com/modern/proxy/badge-service/badge/detail/v2/%d",
badgeID)
badge := new(Badge)
err := c.getJSON(URL, badge)
// This is interesting. Garmin returns 400 if an unknown badge is
// requested. We have no way of detecting that, so we silently changes
// the error to ErrNotFound.
if err == ErrBadRequest {
return nil, ErrNotFound
}
if err != nil {
return nil, err
}
return badge, nil
}