fuzzyworld

find-stone-beer / commit

Moved the loading logic for objects to the object files.

59f699008833bb941266d2eccb714e673f022971 · Pavel Safronov · 2023-08-27 00:30:45 -0700 · parents 5b52b062c004

Moved the loading logic for objects to the object files.
 find-stone.go => beers-info.go | 61 ++++++++++++++++++++++++++
 main.go                        | 97 ++----------------------------------------
 seller-info.go                 | 16 +++++++
 seller.go                      | 40 ++++++++++++-----
 4 files changed, 110 insertions(+), 104 deletions(-)

diff --git a/find-stone.go b/beers-info.go
similarity index 69%
rename from find-stone.go
rename to beers-info.go
index eb37cd9..6b251b9 100644
--- a/find-stone.go
+++ b/beers-info.go
@@ -1,7 +1,12 @@
 package main
 
 import (
+	"bytes"
 	"encoding/json"
+	"errors"
+	"strings"
+
+	"golang.org/x/net/html"
 )
 
 type Core struct {
@@ -64,6 +69,62 @@ func (f *BeersInfo) FindBrandById(targetId string) (bool, Brand) {
 	return false, Brand{}
 }
 
+func GetBeersInfo() (BeersInfo, error) {
+	data, err := getCachedUrlFunc(
+		"https://find.stonebrewing.com",
+		"find-stone-beer-core",
+		"2006-01-02",
+		func(d []byte) ([]byte, error) {
+			reader := bytes.NewReader(d)
+			doc, err := html.Parse(reader)
+			if err != nil {
+				return nil, err
+			}
+
+			var findNodeWithText func(node *html.Node, text string) (bool, *html.Node)
+			findNodeWithText = func(node *html.Node, text string) (bool, *html.Node) {
+				if node.Type == html.TextNode && strings.Contains(node.Data, text) {
+					return true, node
+				}
+
+				if node.FirstChild != nil {
+					found, child := findNodeWithText(node.FirstChild, text)
+					if found {
+						return true, child
+					}
+				}
+
+				if node.NextSibling != nil {
+					found, sibling := findNodeWithText(node.NextSibling, text)
+					if found {
+						return true, sibling
+					}
+				}
+
+				return false, nil
+			}
+			found, node := findNodeWithText(doc, "6376")
+			if !found {
+				return nil, errors.New("could not find node")
+			}
+
+			firstCurly := strings.Index(node.Data, "{")
+			lastCurly := strings.LastIndex(node.Data, "}")
+			jsonText := node.Data[firstCurly : lastCurly+1]
+			return []byte(jsonText), nil
+		})
+	if err != nil {
+		return BeersInfo{}, err
+	}
+
+	var core = Core{}
+	err = json.Unmarshal(data, &core)
+	if err != nil {
+		return BeersInfo{}, err
+	}
+	return core.Beers, nil
+}
+
 type PackageType struct {
 	Name        string `json:"name"`
 	ReleaseDate int    `json:"release_date"`
diff --git a/main.go b/main.go
index b0a5d0e..30a8867 100644
--- a/main.go
+++ b/main.go
@@ -1,9 +1,7 @@
 package main
 
 import (
-	"bytes"
 	"encoding/json"
-	"errors"
 	"fmt"
 	"io"
 	"net/http"
@@ -15,7 +13,6 @@ import (
 
 	"github.com/jftuga/geodist"
 	"golang.org/x/exp/slices"
-	"golang.org/x/net/html"
 )
 
 type relevantSeller struct {
@@ -44,13 +41,13 @@ func main() {
 	var maxDeliveryWindowDays = getEnvVarInteger(MAX_DELIVERY_DAYS_ENV_VAR, 14)
 
 	// descriptions of the beers and packaging
-	beersInfo, err := getBeersInfo()
+	beersInfo, err := GetBeersInfo()
 	if err != nil {
 		panic(err)
 	}
 
 	// get sellers by location
-	sellers, err := getSellers(coords)
+	sellers, err := GetSellers(coords)
 	if err != nil {
 		panic(err)
 	}
@@ -93,7 +90,7 @@ func main() {
 			continue
 		}
 
-		sellerInfo, err := getSellerInfo(seller.Nid)
+		sellerInfo, err := GetSellerInfo(seller.Nid)
 		if err != nil {
 			panic(err)
 		}
@@ -192,94 +189,6 @@ func getCoordsFromEnvVars() (geodist.Coord, error) {
 	return coords, nil
 }
 
-func getSellers(coords geodist.Coord) ([]Seller, error) {
-	lat := coords.Lat
-	latInt := int(lat)
-	lon := coords.Lon
-	lonInt := int(lon)
-	url := fmt.Sprintf("https://find.stonebrewing.com/api/search/%f,%f/%d,%d", lat, lon, latInt, lonInt)
-	bytes, err := getCachedUrl(url, "find-stone-beer", "2006-01-02")
-	if err != nil {
-		return nil, err
-	}
-
-	var sellers []Seller
-	err = json.Unmarshal(bytes, &sellers)
-	if err != nil {
-		panic(err)
-	}
-	return sellers, nil
-}
-func getSellerInfo(id string) (SellerInfo, error) {
-	url := fmt.Sprintf("https://find.stonebrewing.com/api/location/%s", id)
-	bytes, err := getCachedUrl(url, fmt.Sprintf("find-stone-beer-seller-%s", id), "2006-01-02")
-	if err != nil {
-		return SellerInfo{}, err
-	}
-
-	var sellerInfo SellerInfo
-	err = json.Unmarshal(bytes, &sellerInfo)
-	if err != nil {
-		return SellerInfo{}, err
-	}
-	return sellerInfo, nil
-}
-func getBeersInfo() (BeersInfo, error) {
-	data, err := getCachedUrlFunc(
-		"https://find.stonebrewing.com",
-		"find-stone-beer-core",
-		"2006-01-02",
-		func(d []byte) ([]byte, error) {
-			reader := bytes.NewReader(d)
-			doc, err := html.Parse(reader)
-			if err != nil {
-				return nil, err
-			}
-
-			var findNodeWithText func(node *html.Node, text string) (bool, *html.Node)
-			findNodeWithText = func(node *html.Node, text string) (bool, *html.Node) {
-				if node.Type == html.TextNode && strings.Contains(node.Data, text) {
-					return true, node
-				}
-
-				if node.FirstChild != nil {
-					found, child := findNodeWithText(node.FirstChild, text)
-					if found {
-						return true, child
-					}
-				}
-
-				if node.NextSibling != nil {
-					found, sibling := findNodeWithText(node.NextSibling, text)
-					if found {
-						return true, sibling
-					}
-				}
-
-				return false, nil
-			}
-			found, node := findNodeWithText(doc, "6376")
-			if !found {
-				return nil, errors.New("could not find node")
-			}
-
-			firstCurly := strings.Index(node.Data, "{")
-			lastCurly := strings.LastIndex(node.Data, "}")
-			jsonText := node.Data[firstCurly : lastCurly+1]
-			return []byte(jsonText), nil
-		})
-	if err != nil {
-		return BeersInfo{}, err
-	}
-
-	var core = Core{}
-	err = json.Unmarshal(data, &core)
-	if err != nil {
-		return BeersInfo{}, err
-	}
-	return core.Beers, nil
-}
-
 func getCachedUrl(url string, id string, cacheFileTimeFormat string) ([]byte, error) {
 	return getCachedUrlFunc(url, id, cacheFileTimeFormat, func(bytes []byte) ([]byte, error) {
 		return bytes, nil
diff --git a/seller-info.go b/seller-info.go
index ff8b25f..eae8f2e 100644
--- a/seller-info.go
+++ b/seller-info.go
@@ -2,6 +2,7 @@ package main
 
 import (
 	"encoding/json"
+	"fmt"
 	"strconv"
 
 	"github.com/jftuga/geodist"
@@ -47,3 +48,18 @@ func (s *SellerInfo) UnmarshalJSON(data []byte) error {
 	*s = newSellerInfo
 	return nil
 }
+
+func GetSellerInfo(id string) (SellerInfo, error) {
+	url := fmt.Sprintf("https://find.stonebrewing.com/api/location/%s", id)
+	bytes, err := getCachedUrl(url, fmt.Sprintf("find-stone-beer-seller-%s", id), "2006-01-02")
+	if err != nil {
+		return SellerInfo{}, err
+	}
+
+	var sellerInfo SellerInfo
+	err = json.Unmarshal(bytes, &sellerInfo)
+	if err != nil {
+		return SellerInfo{}, err
+	}
+	return sellerInfo, nil
+}
diff --git a/seller.go b/seller.go
index 7f7cf2e..bb64dd2 100644
--- a/seller.go
+++ b/seller.go
@@ -2,21 +2,22 @@ package main
 
 import (
 	"encoding/json"
+	"fmt"
 	"strconv"
 
 	"github.com/jftuga/geodist"
 )
 
 type Seller struct {
-	Nid              string
-	Title            string
-	Addr             string
-	Addr1            string
-	Addr2            string
-	Distance         float64
-	Phone            string
-	Cot              string
-	Pos              geodist.Coord
+	Nid      string
+	Title    string
+	Addr     string
+	Addr1    string
+	Addr2    string
+	Distance float64
+	Phone    string
+	Cot      string
+	Pos      geodist.Coord
 	// Lat              float64
 	// Lng              float64
 	LocationCategory string
@@ -68,7 +69,7 @@ func (s *Seller) UnmarshalJSON(data []byte) error {
 		if err != nil {
 			return err
 		}
-		
+
 		lng, err := strconv.ParseFloat(seller.Lng, 64)
 		if err != nil {
 			return err
@@ -80,3 +81,22 @@ func (s *Seller) UnmarshalJSON(data []byte) error {
 	*s = newSeller
 	return nil
 }
+
+func GetSellers(coords geodist.Coord) ([]Seller, error) {
+	lat := coords.Lat
+	latInt := int(lat)
+	lon := coords.Lon
+	lonInt := int(lon)
+	url := fmt.Sprintf("https://find.stonebrewing.com/api/search/%f,%f/%d,%d", lat, lon, latInt, lonInt)
+	bytes, err := getCachedUrl(url, "find-stone-beer", "2006-01-02")
+	if err != nil {
+		return nil, err
+	}
+
+	var sellers []Seller
+	err = json.Unmarshal(bytes, &sellers)
+	if err != nil {
+		return nil, err
+	}
+	return sellers, nil
+}