diff --git a/cmd/cart/main.go b/cmd/cart/main.go index c767309..03fb479 100644 --- a/cmd/cart/main.go +++ b/cmd/cart/main.go @@ -138,19 +138,69 @@ func main() { pool: pool, } - conn, err := amqp.Dial(amqpUrl) - if err != nil { - fmt.Errorf("failed to connect to RabbitMQ: %w", err) - } + klarnaClient := NewKlarnaClient(KlarnaPlaygroundUrl, os.Getenv("KLARNA_API_USERNAME"), os.Getenv("KLARNA_API_PASSWORD")) - amqpListener := actor.NewAmqpListener(conn, func(id uint64, msg []actor.ApplyResult) (any, error) { - return &CartChangeEvent{ - CartId: cart.CartId(id), - Mutations: msg, - }, nil - }) - amqpListener.DefineTopics() - pool.AddListener(amqpListener) + syncedServer := NewPoolServer(pool, fmt.Sprintf("%s, %s", name, podIp), klarnaClient) + + mux := http.NewServeMux() + + if amqpUrl == "" { + log.Printf("no connection to amqp defined") + } else { + conn, err := amqp.Dial(amqpUrl) + if err != nil { + fmt.Errorf("failed to connect to RabbitMQ: %w", err) + } + + amqpListener := actor.NewAmqpListener(conn, func(id uint64, msg []actor.ApplyResult) (any, error) { + return &CartChangeEvent{ + CartId: cart.CartId(id), + Mutations: msg, + }, nil + }) + amqpListener.DefineTopics() + pool.AddListener(amqpListener) + orderHandler := NewAmqpOrderHandler(conn) + orderHandler.DefineTopics() + + mux.HandleFunc("/push", func(w http.ResponseWriter, r *http.Request) { + + if r.Method != http.MethodPost { + w.WriteHeader(http.StatusMethodNotAllowed) + return + } + orderId := r.URL.Query().Get("order_id") + log.Printf("Order confirmation push: %s", orderId) + + order, err := klarnaClient.GetOrder(orderId) + + if err != nil { + log.Printf("Error creating request: %v\n", err) + w.WriteHeader(http.StatusInternalServerError) + return + } + + err = confirmOrder(order, orderHandler) + if err != nil { + log.Printf("Error confirming order: %v\n", err) + w.WriteHeader(http.StatusInternalServerError) + return + } + + err = triggerOrderCompleted(syncedServer, order) + if err != nil { + log.Printf("Error processing cart message: %v\n", err) + w.WriteHeader(http.StatusInternalServerError) + return + } + err = klarnaClient.AcknowledgeOrder(orderId) + if err != nil { + log.Printf("Error acknowledging order: %v\n", err) + } + + w.WriteHeader(http.StatusOK) + }) + } grpcSrv, err := actor.NewControlServer[*cart.CartGrain](controlPlaneConfig, pool) if err != nil { @@ -188,13 +238,6 @@ func main() { } }(GetDiscovery()) - orderHandler := NewAmqpOrderHandler(conn) - orderHandler.DefineTopics() - klarnaClient := NewKlarnaClient(KlarnaPlaygroundUrl, os.Getenv("KLARNA_API_USERNAME"), os.Getenv("KLARNA_API_PASSWORD")) - - syncedServer := NewPoolServer(pool, fmt.Sprintf("%s, %s", name, podIp), klarnaClient) - - mux := http.NewServeMux() mux.Handle("/cart/", http.StripPrefix("/cart", syncedServer.Serve())) // only for local mux.HandleFunc("GET /add/remote/{host}", func(w http.ResponseWriter, r *http.Request) { @@ -295,43 +338,7 @@ func main() { //} w.WriteHeader(http.StatusOK) }) - mux.HandleFunc("/push", func(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodPost { - w.WriteHeader(http.StatusMethodNotAllowed) - return - } - orderId := r.URL.Query().Get("order_id") - log.Printf("Order confirmation push: %s", orderId) - - order, err := klarnaClient.GetOrder(orderId) - - if err != nil { - log.Printf("Error creating request: %v\n", err) - w.WriteHeader(http.StatusInternalServerError) - return - } - - err = confirmOrder(order, orderHandler) - if err != nil { - log.Printf("Error confirming order: %v\n", err) - w.WriteHeader(http.StatusInternalServerError) - return - } - - err = triggerOrderCompleted(syncedServer, order) - if err != nil { - log.Printf("Error processing cart message: %v\n", err) - w.WriteHeader(http.StatusInternalServerError) - return - } - err = klarnaClient.AcknowledgeOrder(orderId) - if err != nil { - log.Printf("Error acknowledging order: %v\n", err) - } - - w.WriteHeader(http.StatusOK) - }) mux.HandleFunc("/version", func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) w.Write([]byte("1.0.0"))