From 30d52f5f25021ccd3c91ef5164287260f5292431 Mon Sep 17 00:00:00 2001 From: filifa Date: Sun, 28 Jul 2024 19:07:59 -0500 Subject: [PATCH] add standings subcommand --- cmd/internal/statsapi/client.go | 13 ++++++ cmd/standings.go | 82 +++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 cmd/standings.go diff --git a/cmd/internal/statsapi/client.go b/cmd/internal/statsapi/client.go index f1bbf09..72a80d9 100644 --- a/cmd/internal/statsapi/client.go +++ b/cmd/internal/statsapi/client.go @@ -42,6 +42,10 @@ func RequestContent(gamePk string) ([]byte, error) { return DefaultClient.RequestContent(gamePk) } +func RequestStandings(leagueId string) ([]byte, error) { + return DefaultClient.RequestStandings(leagueId) +} + type DiffPatchResponse []byte type Client struct { @@ -108,6 +112,15 @@ func (c *Client) RequestContent(gamePk string) ([]byte, error) { return c.get(&endpoint) } +func (c *Client) RequestStandings(leagueId string) ([]byte, error) { + endpoint := url.URL{Path: "api/v1/standings"} + query := endpoint.Query() + query.Add("leagueId", leagueId) + endpoint.RawQuery = query.Encode() + + return c.get(&endpoint) +} + func (c *Client) get(endpoint *url.URL) ([]byte, error) { url := c.baseURL.ResolveReference(endpoint) diff --git a/cmd/standings.go b/cmd/standings.go new file mode 100644 index 0000000..33e2bef --- /dev/null +++ b/cmd/standings.go @@ -0,0 +1,82 @@ +/* +Copyright © 2024 filifa + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ +package cmd + +import ( + "fmt" + "log" + "strconv" + + "github.com/spf13/cobra" + "scm.dairydemon.net/filifa/mlblive/cmd/internal/statsapi" +) + +var league string +var leagueIDs = map[string]statsapi.LeagueID{ + "al": statsapi.AL, + "nl": statsapi.NL, + "nn2": statsapi.NN2, + "nnl": statsapi.NNL, + "ewl": statsapi.EWL, + "nal": statsapi.NAL, + "ecl": statsapi.ECL, + "anl": statsapi.ANL, + "nsl": statsapi.NSL, + "aa": statsapi.AA, + "pl": statsapi.PL, + "ua": statsapi.UA, + "fl": statsapi.FL, +} + +func standings(cmd *cobra.Command, args []string) { + lgID, ok := leagueIDs[league] + if !ok { + log.Fatal("invalid league") + } + leagueId := strconv.Itoa(int(lgID)) + + standing, err := statsapi.RequestStandings(leagueId) + if err != nil { + log.Fatal(err) + } + + fmt.Println(string(standing)) +} + +// standingsCmd represents the standings command +var standingsCmd = &cobra.Command{ + Use: "standings -l [league]", + Short: "Retrieve league standings", + Long: `Retrieve league standings`, + Run: standings, +} + +func init() { + rootCmd.AddCommand(standingsCmd) + + // Here you will define your flags and configuration settings. + + // Cobra supports Persistent Flags which will work for this command + // and all subcommands, e.g.: + // standingsCmd.PersistentFlags().String("foo", "", "A help for foo") + + // Cobra supports local flags which will only run when this command + // is called directly, e.g.: + // standingsCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") + standingsCmd.Flags().StringVarP(&league, "league", "l", "", "league to get standings for") + standingsCmd.MarkFlagRequired("league") +}