public ShoppingCartModule(IShoppingCartStore shoppingCartStore,
                                  IProductCatalogClient productCatalogClient,
                                  IEventStore eventStore)
            : base("/shoppingcart")
        {
            Get("/{userid:int}", async parameters => await GetShoppingCart(shoppingCartStore, parameters));

            Post("/{userid:int}", async(parameters, _) =>
            {
                var productIds = this.Bind <int[]>();
                ShoppingCartModel shoppingCart = await GetShoppingCart(shoppingCartStore, parameters);

                var products = await productCatalogClient.GetShoppingCartItems(productIds).ConfigureAwait(false);
                shoppingCart.AddProducts(products, eventStore);

                shoppingCartStore.Save(shoppingCart);
                return(shoppingCart);
            });

            Delete("/{userid:int}", async parameters =>
            {
                var productIds = this.Bind <int[]>(new BindingConfig()
                {
                    BodyOnly = true
                });
                var shoppingCart = await GetShoppingCart(shoppingCartStore, parameters);

                shoppingCart.RemoveProducts(productIds, eventStore);

                shoppingCartStore.Save(shoppingCart);
                return(shoppingCart);
            });
        }