diff --git a/internal/statsapi/client.go b/internal/statsapi/client.go index 1c31181..a740bf7 100644 --- a/internal/statsapi/client.go +++ b/internal/statsapi/client.go @@ -1,9 +1,12 @@ package statsapi import ( + "encoding/json" "io" "net/http" "net/url" + + "github.com/evanphx/json-patch/v5" ) var DefaultClient = NewClient(http.DefaultClient) @@ -35,6 +38,32 @@ func NewClient(c *http.Client) *Client { } } +func ExtractPatches(diffPatch []byte) ([]jsonpatch.Patch, error) { + var patches []jsonpatch.Patch + + var objs []map[string]any + err := json.Unmarshal(diffPatch, &objs) + if err != nil { + return patches, err + } + + for _, obj := range objs { + diff := obj["diff"] + patch, err := json.Marshal(diff) + if err != nil { + break + } + + p, err := jsonpatch.DecodePatch(patch) + if err != nil { + break + } + patches = append(patches, p) + } + + return patches, err +} + func (c *Client) RequestSchedule(sportId, teamId string) ([]byte, error) { endpoint := url.URL{Path: "api/v1/schedule"} query := endpoint.Query() diff --git a/main.go b/main.go index 97343f6..f68ec6d 100644 --- a/main.go +++ b/main.go @@ -9,7 +9,6 @@ import ( "strconv" "time" - "github.com/evanphx/json-patch/v5" "scm.dairydemon.net/filifa/mlblive/internal/statsapi" ) @@ -49,39 +48,13 @@ func getGamePk() string { return gamePk } -func extractPatches(diffPatch []byte) ([]jsonpatch.Patch, error) { - var patches []jsonpatch.Patch - - var objs []map[string]any - err := json.Unmarshal(diffPatch, &objs) - if err != nil { - return patches, err - } - - for _, obj := range objs { - diff := obj["diff"] - patch, err := json.Marshal(diff) - if err != nil { - break - } - - p, err := jsonpatch.DecodePatch(patch) - if err != nil { - break - } - patches = append(patches, p) - } - - return patches, err -} - func updateFeed(feedResp []byte, gamePk, ts, updateId string) ([]byte, error) { diffPatchResp, err := statsapi.RequestDiffPatch(gamePk, ts, updateId) if err != nil { return statsapi.RequestFeed(gamePk) } - patches, err := extractPatches(diffPatchResp) + patches, err := statsapi.ExtractPatches(diffPatchResp) if err != nil { return statsapi.RequestFeed(gamePk) }