/
reserved-order.go
43 lines (34 loc) · 1.16 KB
/
reserved-order.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package tga
import (
"encoding/json"
"fmt"
)
type ReservedOrder struct {
Id string
StoreId string
Quantity int
}
func (o *ReservedOrder) String() string {
return fmt.Sprintf("Order # %v in store %v with %v bags", o.Id, o.StoreId, o.Quantity)
}
func NewReservedOrderFromCreateOrder(responseBody []byte) (ReservedOrder, error) {
var reservedOrder ReservedOrder
if len(responseBody) == 0 {
return reservedOrder, nil
}
var parsedReservedOrder map[string]interface{}
err := json.Unmarshal(responseBody, &parsedReservedOrder)
if err != nil {
glog.Printf("full response: %v\n", string(responseBody))
return reservedOrder, fmt.Errorf("error from json.Unmarshal: %w", err)
}
state := parsedReservedOrder["state"].(string)
if state != "SUCCESS" {
return reservedOrder, fmt.Errorf("reserved order state %v is not OK", state)
}
reservedOrderData := parsedReservedOrder["order"].(map[string]interface{})
reservedOrder.Id = reservedOrderData["id"].(string)
reservedOrder.StoreId = reservedOrderData["item_id"].(string)
reservedOrder.Quantity = int(reservedOrderData["order_line"].(map[string]interface{})["quantity"].(float64))
return reservedOrder, nil
}