From fa896705537d229d98c3eb40e96b6ac0b3003ad6 Mon Sep 17 00:00:00 2001 From: matst80 Date: Thu, 16 Oct 2025 12:45:45 +0200 Subject: [PATCH] update checkout handler --- cmd/cart/main.go | 61 +++++------------------------------------ cmd/cart/pool-server.go | 18 ++++++++++++ 2 files changed, 25 insertions(+), 54 deletions(-) diff --git a/cmd/cart/main.go b/cmd/cart/main.go index d1e71c5..c767309 100644 --- a/cmd/cart/main.go +++ b/cmd/cart/main.go @@ -233,61 +233,14 @@ func main() { w.Write([]byte("ok")) }) - mux.HandleFunc("/checkout", func(w http.ResponseWriter, r *http.Request) { - orderId := r.URL.Query().Get("order_id") - order := &CheckoutOrder{} + mux.HandleFunc("/checkout", syncedServer.CheckoutHandler(func(order *CheckoutOrder, w http.ResponseWriter) error { + w.Header().Set("Content-Type", "text/html; charset=utf-8") + w.Header().Set("Permissions-Policy", "payment=(self \"https://js.stripe.com\" \"https://m.stripe.network\" \"https://js.playground.kustom.co\")") + w.WriteHeader(http.StatusOK) + _, err := fmt.Fprintf(w, tpl, order.HTMLSnippet) + return err + })) - if orderId == "" { - cookie, err := r.Cookie("cartid") - if err != nil { - w.WriteHeader(http.StatusBadRequest) - w.Write([]byte(err.Error())) - return - } - if cookie.Value == "" { - w.WriteHeader(http.StatusBadRequest) - w.Write([]byte("no cart id to checkout is empty")) - return - } - parsed, ok := cart.ParseCartId(cookie.Value) - if !ok { - w.WriteHeader(http.StatusBadRequest) - w.Write([]byte("invalid cart id format")) - return - } - cartId := parsed - syncedServer.ProxyHandler(func(w http.ResponseWriter, r *http.Request, cartId cart.CartId) error { - order, err = syncedServer.CreateOrUpdateCheckout(r.Host, cartId) - if err != nil { - return err - } - w.Header().Set("Content-Type", "text/html; charset=utf-8") - w.Header().Set("Permissions-Policy", "payment=(self \"https://js.stripe.com\" \"https://m.stripe.network\" \"https://js.playground.kustom.co\")") - w.WriteHeader(http.StatusOK) - fmt.Fprintf(w, tpl, order.HTMLSnippet) - return nil - })(cartId, w, r) - - if err != nil { - w.WriteHeader(http.StatusInternalServerError) - w.Write([]byte(err.Error())) - } - - // v2: Apply now returns *CartGrain; order creation handled inside grain (no payload to unmarshal) - } else { - order, err = klarnaClient.GetOrder(orderId) - if err != nil { - w.WriteHeader(http.StatusBadRequest) - w.Write([]byte(err.Error())) - return - } - w.Header().Set("Content-Type", "text/html; charset=utf-8") - w.Header().Set("Permissions-Policy", "payment=(self \"https://js.stripe.com\" \"https://m.stripe.network\" \"https://js.playground.kustom.co\")") - w.WriteHeader(http.StatusOK) - fmt.Fprintf(w, tpl, order.HTMLSnippet) - } - - }) mux.HandleFunc("/confirmation/{order_id}", func(w http.ResponseWriter, r *http.Request) { orderId := r.PathValue("order_id") diff --git a/cmd/cart/pool-server.go b/cmd/cart/pool-server.go index b1be858..10f4f25 100644 --- a/cmd/cart/pool-server.go +++ b/cmd/cart/pool-server.go @@ -488,6 +488,24 @@ func (s *PoolServer) SubscriptionDetailsHandler(w http.ResponseWriter, r *http.R return nil } +func (s *PoolServer) CheckoutHandler(fn func(order *CheckoutOrder, w http.ResponseWriter) error) func(w http.ResponseWriter, r *http.Request) { + return CookieCartIdHandler(s.ProxyHandler(func(w http.ResponseWriter, r *http.Request, cartId cart.CartId) error { + orderId := r.URL.Query().Get("order_id") + if orderId == "" { + order, err := s.CreateOrUpdateCheckout(r.Host, cartId) + if err != nil { + return err + } + return fn(order, w) + } + order, err := s.klarnaClient.GetOrder(orderId) + if err != nil { + return err + } + return fn(order, w) + })) +} + func (s *PoolServer) RemoveVoucherHandler(w http.ResponseWriter, r *http.Request, cartId cart.CartId) error { idStr := r.PathValue("voucherId")