From bc1c3761c23f9fed268472c5b62c032ff8e43e61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Tue, 16 May 2017 15:32:44 +0200 Subject: [PATCH] Change Xamarin app to call basket for order checkout --- .../Models/Basket/BasketCheckout.cs | 36 +++++++++++++++++++ .../Services/Basket/BasketService.cs | 9 +++++ .../Services/Basket/IBasketService.cs | 1 + .../Services/Order/IOrderService.cs | 6 ++-- .../Services/Order/OrderMockService.cs | 27 ++++++++------ .../Services/Order/OrderService.cs | 30 +++++++++------- .../ViewModels/CheckoutViewModel.cs | 6 ++-- .../eShopOnContainers.Core.csproj | 6 ++++ 8 files changed, 95 insertions(+), 26 deletions(-) create mode 100644 src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Basket/BasketCheckout.cs diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Basket/BasketCheckout.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Basket/BasketCheckout.cs new file mode 100644 index 000000000..e6b7aaea6 --- /dev/null +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Basket/BasketCheckout.cs @@ -0,0 +1,36 @@ +using System; +using System.ComponentModel.DataAnnotations; + +namespace eShopOnContainers.Core.Models.Basket +{ + public class BasketCheckout + { + [Required] + public string City { get; set; } + [Required] + public string Street { get; set; } + [Required] + public string State { get; set; } + [Required] + public string Country { get; set; } + + public string ZipCode { get; set; } + [Required] + public string CardNumber { get; set; } + [Required] + public string CardHolderName { get; set; } + + [Required] + public DateTime CardExpiration { get; set; } + + [Required] + public string CardSecurityNumber { get; set; } + + public int CardTypeId { get; set; } + + public string Buyer { get; set; } + + [Required] + public Guid RequestId { get; set; } + } +} diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketService.cs index c3607c1e3..b7b36d984 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketService.cs @@ -42,6 +42,15 @@ namespace eShopOnContainers.Core.Services.Basket return result; } + public async Task CheckoutAsync(BasketCheckout basketCheckout, string token) + { + UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BasketEndpoint + "/checkout"); + + string uri = builder.ToString(); + + await _requestProvider.PostAsync(uri, basketCheckout, token); + } + public async Task ClearBasketAsync(string guidUser, string token) { UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BasketEndpoint); diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/IBasketService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/IBasketService.cs index 26b785acc..f77080e6d 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/IBasketService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/IBasketService.cs @@ -7,6 +7,7 @@ namespace eShopOnContainers.Core.Services.Basket { Task GetBasketAsync(string guidUser, string token); Task UpdateBasketAsync(CustomerBasket customerBasket, string token); + Task CheckoutAsync(BasketCheckout basketCheckout, string token); Task ClearBasketAsync(string guidUser, string token); } } \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/IOrderService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/IOrderService.cs index 9636782ee..f13520463 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/IOrderService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/IOrderService.cs @@ -1,13 +1,15 @@ -using System.Collections.ObjectModel; +using eShopOnContainers.Core.Models.Basket; +using System.Collections.ObjectModel; using System.Threading.Tasks; namespace eShopOnContainers.Core.Services.Order { public interface IOrderService { - Task CreateOrderAsync(Models.Orders.Order newOrder, string token); + //Task CreateOrderAsync(Models.Orders.Order newOrder, string token); Task> GetOrdersAsync(string token); Task GetOrderAsync(int orderId, string token); Task> GetCardTypesAsync(string token); + BasketCheckout MapOrderToBasket(Models.Orders.Order order); } } \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderMockService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderMockService.cs index 9d19d1ef6..05287bb85 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderMockService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderMockService.cs @@ -1,4 +1,5 @@ using eShopOnContainers.Core.Extensions; +using eShopOnContainers.Core.Models.Basket; using eShopOnContainers.Core.Models.Orders; using eShopOnContainers.Core.Models.User; using System; @@ -64,17 +65,18 @@ namespace eShopOnContainers.Core.Services.Order new CardType { Id = 3, Name = "MasterCard" }, }; - public async Task CreateOrderAsync(Models.Orders.Order newOrder, string token) + private static BasketCheckout MockBasketCheckout = new BasketCheckout() { - await Task.Delay(500); - - if (!string.IsNullOrEmpty(token)) - { - newOrder.OrderNumber = string.Format("{0}", MockOrders.Count + 1); - - MockOrders.Insert(0, newOrder); - } - } + CardExpiration = DateTime.UtcNow, + CardHolderName = "FakeCardHolderName", + CardNumber = "122333423224", + CardSecurityNumber = "1234", + CardTypeId = 1, + City = "FakeCity", + Country = "FakeCountry", + ZipCode = "FakeZipCode", + Street = "FakeStreet" + }; public async Task> GetOrdersAsync(string token) { @@ -111,5 +113,10 @@ namespace eShopOnContainers.Core.Services.Order else return new ObservableCollection(); } + + public BasketCheckout MapOrderToBasket(Models.Orders.Order order) + { + return MockBasketCheckout; + } } } \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderService.cs index 0005bfd22..2c95c62b6 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderService.cs @@ -1,4 +1,5 @@ -using eShopOnContainers.Core.Services.RequestProvider; +using eShopOnContainers.Core.Models.Basket; +using eShopOnContainers.Core.Services.RequestProvider; using System; using System.Collections.ObjectModel; using System.Threading.Tasks; @@ -14,17 +15,6 @@ namespace eShopOnContainers.Core.Services.Order _requestProvider = requestProvider; } - public async Task CreateOrderAsync(Models.Orders.Order newOrder, string token) - { - UriBuilder builder = new UriBuilder(GlobalSetting.Instance.OrdersEndpoint); - - builder.Path = "api/v1/orders/new"; - - string uri = builder.ToString(); - - await _requestProvider.PostAsync(uri, newOrder, token, "x-requestid"); - } - public async Task> GetOrdersAsync(string token) { @@ -82,5 +72,21 @@ namespace eShopOnContainers.Core.Services.Order return new ObservableCollection(); } } + + public BasketCheckout MapOrderToBasket(Models.Orders.Order order) + { + return new BasketCheckout() + { + CardExpiration = order.CardExpiration, + CardHolderName = order.CardHolderName, + CardNumber = order.CardNumber, + CardSecurityNumber = order.CardSecurityNumber, + CardTypeId = order.CardTypeId, + City = order.ShippingCity, + Country = order.ShippingCountry, + ZipCode = order.ShippingZipCode, + Street = order.ShippingStreet + }; + } } } \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs index 4ac73a5c1..5e121e1f4 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs @@ -132,8 +132,10 @@ namespace eShopOnContainers.Core.ViewModels { var authToken = Settings.AuthAccessToken; - // Create new order - await _orderService.CreateOrderAsync(Order, authToken); + var basket = _orderService.MapOrderToBasket(Order); + + // Create basket checkout + await _basketService.CheckoutAsync(basket, authToken); // Clean Basket await _basketService.ClearBasketAsync(_shippingAddress.Id.ToString(), authToken); diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/eShopOnContainers.Core.csproj b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/eShopOnContainers.Core.csproj index f5c8c4b13..548bc8e73 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/eShopOnContainers.Core.csproj +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/eShopOnContainers.Core.csproj @@ -65,6 +65,7 @@ + @@ -260,6 +261,11 @@ MSBuild:UpdateDesignTimeXaml + + + ..\..\..\..\..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETPortable\v4.6\Profile\Profile44\System.ComponentModel.Annotations.dll + +