fuzzyworld

find-stone-beer / files / seller-info.go

seller-info.go

1.3 KB · history · blame

1package main
2
3import (
4 "encoding/json"
5 "fmt"
6 "strconv"
7
8 "github.com/jftuga/geodist"
9)
10
11type SellerInfo struct {
12 Phone string
13 Beers []Beer
14 // Lat float64
15 // Lon float64
16 Pos geodist.Coord
17 JSON any
18}
19
20func (s *SellerInfo) UnmarshalJSON(data []byte) error {
21 sellerInfo := &struct {
22 Phone string `json:"phone"`
23 Beers []Beer `json:"beers"`
24 Lat string `json:"lat"`
25 Lon string `json:"lon"`
26 JSON any `json:"json"`
27 }{}
28 json.Unmarshal(data, &sellerInfo)
29
30 newSellerInfo := SellerInfo{
31 Phone: sellerInfo.Phone,
32 Beers: sellerInfo.Beers,
33 JSON: sellerInfo.JSON,
34 }
35
36 if len(sellerInfo.Lat) > 0 && len(sellerInfo.Lon) > 0 {
37 lat, err := strconv.ParseFloat(sellerInfo.Lat, 64)
38 if err != nil {
39 return err
40 }
41 lon, err := strconv.ParseFloat(sellerInfo.Lon, 64)
42 if err != nil {
43 return err
44 }
45 newSellerInfo.Pos = geodist.Coord{Lat: lat, Lon: lon}
46 }
47
48 *s = newSellerInfo
49 return nil
50}
51
52func GetSellerInfo(id string) (SellerInfo, error) {
53 url := fmt.Sprintf("https://find.stonebrewing.com/api/location/%s", id)
54 bytes, err := getCachedUrl(url, fmt.Sprintf("find-stone-beer-seller-%s", id), "2006-01-02")
55 if err != nil {
56 return SellerInfo{}, err
57 }
58
59 var sellerInfo SellerInfo
60 err = json.Unmarshal(bytes, &sellerInfo)
61 if err != nil {
62 return SellerInfo{}, err
63 }
64 return sellerInfo, nil
65}