Files
go-garth-cli/python-garmin-connect/Badge.go
2025-09-21 11:03:52 -07:00

60 lines
2.0 KiB
Go

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
}