From 2ec570c5072aa20e44d97bae489e8b78fce56ff3 Mon Sep 17 00:00:00 2001 From: Ahmet Alp Balkan Date: Wed, 27 Jun 2018 15:43:24 -0700 Subject: [PATCH] frontend: checkout form Signed-off-by: Ahmet Alp Balkan --- src/frontend/handlers.go | 22 ++++ src/frontend/main.go | 5 + src/frontend/port-forward-dependencies.sh | 13 +++ src/frontend/templates/cart.html | 105 +++++++++++++------- src/frontend/templates/recommendations.html | 2 +- 5 files changed, 111 insertions(+), 36 deletions(-) create mode 100755 src/frontend/port-forward-dependencies.sh diff --git a/src/frontend/handlers.go b/src/frontend/handlers.go index 0feeae9..371a177 100644 --- a/src/frontend/handlers.go +++ b/src/frontend/handlers.go @@ -233,6 +233,28 @@ func (fe *frontendServer) viewCartHandler(w http.ResponseWriter, r *http.Request } } +func (fe *frontendServer) prepareCheckoutHandler(w http.ResponseWriter, r *http.Request) { + streetAddress1 := r.FormValue("street_address_1") + streetAddress2 := r.FormValue("street_address_2") + city := r.FormValue("city") + country := r.FormValue("country") + zipCode, _ := strconv.ParseInt(r.FormValue("country"), 10, 32) + + log.Printf("[prepareCheckout] session_id=%+v", sessionID(r)) + _, _ = pb.NewCheckoutServiceClient(fe.checkoutSvcConn).CreateOrder(r.Context(), + &pb.CreateOrderRequest{ + UserId: sessionID(r), + UserCurrency: currentCurrency(r), + Address: &pb.Address{ + StreetAddress_1: streetAddress1, + StreetAddress_2: streetAddress2, + City: city, + ZipCode: int32(zipCode), + Country: country, + }, + }) +} + func (fe *frontendServer) logoutHandler(w http.ResponseWriter, r *http.Request) { log.Printf("[home] session_id=%+v", sessionID(r)) for _, c := range r.Cookies() { diff --git a/src/frontend/main.go b/src/frontend/main.go index e5217e9..0bd613d 100644 --- a/src/frontend/main.go +++ b/src/frontend/main.go @@ -40,6 +40,9 @@ type frontendServer struct { recommendationSvcAddr string recommendationSvcConn *grpc.ClientConn + + checkoutSvcAddr string + checkoutSvcConn *grpc.ClientConn } func main() { @@ -55,6 +58,7 @@ func main() { mustMapEnv(&svc.currencySvcAddr, "CURRENCY_SERVICE_ADDR") mustMapEnv(&svc.cartSvcAddr, "CART_SERVICE_ADDR") mustMapEnv(&svc.recommendationSvcAddr, "RECOMMENDATION_SERVICE_ADDR") + mustMapEnv(&svc.checkoutSvcAddr, "CHECKOUT_SERVICE_ADDR") var err error svc.currencySvcConn, err = grpc.DialContext(ctx, svc.currencySvcAddr, grpc.WithInsecure()) @@ -82,6 +86,7 @@ func main() { r.HandleFunc("/cart/empty", ensureSessionID(svc.emptyCartHandler)).Methods(http.MethodPost) r.HandleFunc("/setCurrency", ensureSessionID(svc.setCurrencyHandler)).Methods(http.MethodPost) r.HandleFunc("/logout", svc.logoutHandler).Methods(http.MethodGet) + r.HandleFunc("/checkout", ensureSessionID(svc.prepareCheckoutHandler)).Methods(http.MethodGet, http.MethodHead) r.PathPrefix("/static/").Handler(http.StripPrefix("/static/", http.FileServer(http.Dir("./static/")))) log.Printf("starting server on :" + srvPort) log.Fatal(http.ListenAndServe("localhost:"+srvPort, r)) diff --git a/src/frontend/port-forward-dependencies.sh b/src/frontend/port-forward-dependencies.sh new file mode 100755 index 0000000..5d507b4 --- /dev/null +++ b/src/frontend/port-forward-dependencies.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -ex + +kubectl port-forward $(kubectl get pods -l app=currencyservice -o=name) 7000:31337 & +kubectl port-forward $(kubectl get pods -l app=recommendationservice -o=name) 8081:8080 & +kubectl port-forward $(kubectl get pods -l app=cartservice -o=name) 7070:7070 & +kubectl port-forward $(kubectl get pods -l app=productcatalogservice -o=name) 3550:3550 & +kubectl port-forward $(kubectl get pods -l app=checkoutservice -o=name) 5050:5050 & + +set +x +trap "exit" INT TERM ERR +trap "kill 0" EXIT +wait diff --git a/src/frontend/templates/cart.html b/src/frontend/templates/cart.html index 8e82dcf..97f12f0 100644 --- a/src/frontend/templates/cart.html +++ b/src/frontend/templates/cart.html @@ -5,45 +5,80 @@
{{ if eq (len $.items) 0 }} -

Your shopping cart is empty!

-

Items you add to your shopping cart will appear here.

- Browse Products → +

Your shopping cart is empty!

+

Items you add to your shopping cart will appear here.

+ Browse Products → {{ else }} -

{{ len $.items }} item {{- if gt (len $.items) 0}}s{{end}} - in your Shopping Cart

- {{ end }} - {{ range $.items }} -
-
- -
-
- {{.Item.Name}}
- SKU: #{{.Item.Id}} -
-
- Qty: {{.Quantity}}
- - {{ renderMoney .Price}} - -
-
- {{ end }} - - {{ if $.items }} -
-
-
-
- -
- Proceed to Checkout → +

{{ len $.items }} item {{- if gt (len $.items) 1}}s{{end}} + in your Shopping Cart

+ + {{ range $.items }} +
+
+ +
+
+ {{.Item.Name}}
+ SKU: #{{.Item.Id}} +
+
+ Qty: {{.Quantity}}
+ + {{ renderMoney .Price}} +
-
- {{ end }} + {{ end }} + +
+
+
+

Prepare to checkout

+
+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+
+
+ + + + Proceed to Checkout → +
+
+ +
+
+ {{ end }} {{ if $.recommendations}}
diff --git a/src/frontend/templates/recommendations.html b/src/frontend/templates/recommendations.html index 66c5b6a..936a903 100644 --- a/src/frontend/templates/recommendations.html +++ b/src/frontend/templates/recommendations.html @@ -1,6 +1,6 @@ {{ define "recommendations" }}
Products you might like
-
+
{{range . }}