diff --git a/cart-grain.go b/cart-grain.go index 7d2ca8a..e5ea5bb 100644 --- a/cart-grain.go +++ b/cart-grain.go @@ -1,6 +1,7 @@ package main import ( + "bytes" "encoding/json" "fmt" "log" @@ -469,7 +470,26 @@ func (c *CartGrain) HandleMessage(message *Message, isReplay bool) (*FrameWithPa if err != nil { return nil, err } - result := MakeFrameWithPayload(RemoteCreateOrderReply, 200, orderPayload) + var klarnaOrder *CheckoutOrder + if c.OrderReference != "" { + klarnaOrder, err = KlarnaInstance.UpdateOrder(c.OrderReference, bytes.NewReader(orderPayload)) + } else { + klarnaOrder, err = KlarnaInstance.GetOrder(c.OrderReference) + } + + if nil != err { + return nil, err + } + + c.OrderReference = klarnaOrder.ID + c.PaymentStatus = klarnaOrder.Status + + orderData, err := json.Marshal(klarnaOrder) + if nil != err { + return nil, err + } + + result := MakeFrameWithPayload(RemoteCreateOrderReply, 200, orderData) return &result, nil } case OrderCompletedType: diff --git a/main.go b/main.go index 5baffbc..01a9e54 100644 --- a/main.go +++ b/main.go @@ -96,6 +96,7 @@ func (a *App) HandleSave(w http.ResponseWriter, r *http.Request) { var podIp = os.Getenv("POD_IP") var name = os.Getenv("POD_NAME") var amqpUrl = os.Getenv("AMQP_URL") +var KlarnaInstance = NewKlarnaClient(KlarnaPlaygroundUrl, os.Getenv("KLARNA_API_USERNAME"), os.Getenv("KLARNA_API_PASSWORD")) func GetDiscovery() Discovery { if podIp == "" { @@ -148,9 +149,7 @@ func main() { Url: amqpUrl, } - klarnaClient := NewKlarnaClient(KlarnaPlaygroundUrl, os.Getenv("KLARNA_API_USERNAME"), os.Getenv("KLARNA_API_PASSWORD")) - - syncedServer := NewPoolServer(syncedPool, fmt.Sprintf("%s, %s", name, podIp), klarnaClient) + syncedServer := NewPoolServer(syncedPool, fmt.Sprintf("%s, %s", name, podIp)) mux := http.NewServeMux() mux.Handle("/cart/", http.StripPrefix("/cart", syncedServer.Serve())) // only for local @@ -197,7 +196,7 @@ func main() { orderId := r.URL.Query().Get("order_id") log.Printf("Order confirmation push: %s", orderId) - order, err := klarnaClient.GetOrder(orderId) + order, err := KlarnaInstance.GetOrder(orderId) if err != nil { log.Printf("Error creating request: %v\n", err) diff --git a/pool-server.go b/pool-server.go index 83e0b37..6eb25a5 100644 --- a/pool-server.go +++ b/pool-server.go @@ -1,7 +1,6 @@ package main import ( - "bytes" "encoding/json" "fmt" "log" @@ -19,11 +18,10 @@ type PoolServer struct { klarnaClient *KlarnaClient } -func NewPoolServer(pool GrainPool, pod_name string, klarnaClient *KlarnaClient) *PoolServer { +func NewPoolServer(pool GrainPool, pod_name string) *PoolServer { return &PoolServer{ - pod_name: pod_name, - pool: pool, - klarnaClient: klarnaClient, + pod_name: pod_name, + pool: pool, } } @@ -253,19 +251,13 @@ func (s *PoolServer) HandleCheckout(w http.ResponseWriter, r *http.Request, id C return s.WriteResult(w, reply) } - order, err := s.klarnaClient.CreateOrder(bytes.NewReader(reply.Payload)) + // w.Header().Set("Content-Type", "application/json") + // w.Header().Set("X-Pod-Name", s.pod_name) + // w.Header().Set("Cache-Control", "no-cache") + // w.Header().Set("Access-Control-Allow-Origin", "*") + // w.WriteHeader(http.StatusOK) - if nil != err { - return err - } - - w.Header().Set("Content-Type", "application/json") - w.Header().Set("X-Pod-Name", s.pod_name) - w.Header().Set("Cache-Control", "no-cache") - w.Header().Set("Access-Control-Allow-Origin", "*") - w.WriteHeader(http.StatusOK) - - return json.NewEncoder(w).Encode(order) + return s.WriteResult(w, reply) } func NewCartId() CartId {