diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Extensions/ObservableExtension.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Extensions/ObservableExtension.cs index 800f9a031..5c8f5073a 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Extensions/ObservableExtension.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Extensions/ObservableExtension.cs @@ -9,12 +9,19 @@ namespace eShopOnContainers.Core.Extensions { ObservableCollection collection = new ObservableCollection(); - foreach (T item in source) + try { - collection.Add(item); - } + foreach (T item in source) + { + collection.Add(item); + } - return collection; + return collection; + } + catch + { + return collection; + } } } } \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/GlobalSettings.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/GlobalSettings.cs index 8db061124..6e6ddc526 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/GlobalSettings.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/GlobalSettings.cs @@ -35,6 +35,8 @@ public string IdentityEndpoint { get; set; } + public string UserInfoEndpoint { get; set; } + public string LogoutEndpoint { get; set; } public string IdentityCallback { get; set; } @@ -46,6 +48,7 @@ OrdersEndpoint = string.Format("{0}:5102", baseEndpoint); BasketEndpoint = string.Format("{0}:5103", baseEndpoint); IdentityEndpoint = string.Format("{0}:5105/connect/authorize", baseEndpoint); + UserInfoEndpoint = string.Format("{0}:5105/connect/userinfo", baseEndpoint); LogoutEndpoint = string.Format("{0}:5105/connect/endsession", baseEndpoint); IdentityCallback = "http://eshopxamarin/callback.html"; } diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Helpers/NumericHelper.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Helpers/NumericHelper.cs deleted file mode 100644 index ea4022558..000000000 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Helpers/NumericHelper.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.Collections.ObjectModel; - -namespace eShopOnContainers.Core.Helpers -{ - public class NumericHelper - { - public static ObservableCollection GetNumericList(int count = 100) - { - var result = new ObservableCollection(); - for (int i = 1; i < count; i++) - { - result.Add(i); - } - - return result; - } - } -} \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Basket/BasketItem.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Basket/BasketItem.cs index e427dba64..f95a10b49 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Basket/BasketItem.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Basket/BasketItem.cs @@ -1,105 +1,23 @@ -using eShopOnContainers.Core.Helpers; -using eShopOnContainers.Core.ViewModels.Base; -using eShopOnContainers.ViewModels.Base; -using System; -using System.Collections.ObjectModel; -using Xamarin.Forms; +using System; namespace eShopOnContainers.Core.Models.Basket { - public class BasketItem : ExtendedBindableObject + public class BasketItem { - private string _id; - private string _productId; - private string _productName; - private decimal _unitPrice; - private int _quantity; - private string _pictureUrl; - private ObservableCollection _numbers; + public string Id { get; set; } + + public string ProductId { get; set; } - public BasketItem() - { - Numbers = NumericHelper.GetNumericList(); - } + public string ProductName { get; set; } - public string Id - { - get { return _id; } - set - { - _id = value; - RaisePropertyChanged(() => Id); - } - } + public decimal UnitPrice { get; set; } - public string ProductId - { - get { return _productId; } - set - { - _productId = value; - RaisePropertyChanged(() => ProductId); - } - } + public int Quantity { get; set; } - public string ProductName - { - get { return _productName; } - set - { - _productName = value; - RaisePropertyChanged(() => ProductName); - } - } - - public decimal UnitPrice - { - get { return _unitPrice; } - set - { - _unitPrice = value; - RaisePropertyChanged(() => UnitPrice); - } - } - - public int Quantity - { - get { return _quantity; } - set - { - if (_quantity != value) - { - _quantity = value; - RaisePropertyChanged(() => Quantity); - RaisePropertyChanged(() => Total); - - MessagingCenter.Send(this, MessengerKeys.UpdateProduct); - } - } - } - - public string PictureUrl - { - get { return _pictureUrl; } - set - { - _pictureUrl = value; - RaisePropertyChanged(() => PictureUrl); - } - } + public string PictureUrl { get; set; } public decimal Total { get { return Quantity * UnitPrice; } } - public ObservableCollection Numbers - { - get { return _numbers; } - set - { - _numbers = value; - RaisePropertyChanged(() => Numbers); - } - } - public override string ToString() { return String.Format("Product Id: {0}, Quantity: {1}", ProductId, Quantity); diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/OrderItem.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/OrderItem.cs index f070f6089..f0cc72e12 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/OrderItem.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/OrderItem.cs @@ -1,109 +1,18 @@ -using eShopOnContainers.Core.Helpers; -using eShopOnContainers.ViewModels.Base; -using System; -using System.Collections.ObjectModel; +using System; namespace eShopOnContainers.Core.Models.Orders { - public class OrderItem : ExtendedBindableObject + public class OrderItem { - private string _pictureUrl; - private string _productId; - private Guid _orderId; - private string _productName; - private decimal _unitPrice; - private int _quantity; - private decimal _discount; - private ObservableCollection _numbers; - - public OrderItem() - { - Numbers = NumericHelper.GetNumericList(); - } - - public string ProductId - { - get { return _productId; } - set - { - _productId = value; - RaisePropertyChanged(() => ProductId); - } - } - - public Guid OrderId - { - get { return _orderId; } - set - { - _orderId = value; - RaisePropertyChanged(() => OrderId); - } - } - - public string ProductName - { - get { return _productName; } - set - { - _productName = value; - RaisePropertyChanged(() => ProductName); - } - } - - public decimal UnitPrice - { - get { return _unitPrice; } - set - { - _unitPrice = value; - RaisePropertyChanged(() => UnitPrice); - } - } - - public int Quantity - { - get { return _quantity; } - set - { - _quantity = value; - RaisePropertyChanged(() => Quantity); - RaisePropertyChanged(() => Total); - } - } - - public decimal Discount - { - get { return _discount; } - set - { - _discount = value; - RaisePropertyChanged(() => Discount); - } - } - + public Guid ProductId { get; set; } + public Guid OrderId { get; set; } + public decimal UnitPrice { get; set; } + public string ProductName { get; set; } + public string PictureUrl { get; set; } + public int Quantity { get; set; } + public decimal Discount { get; set; } public decimal Total { get { return Quantity * UnitPrice; } } - public string PictureUrl - { - get { return _pictureUrl; } - set - { - _pictureUrl = value; - RaisePropertyChanged(() => PictureUrl); - } - } - - public ObservableCollection Numbers - { - get { return _numbers; } - set - { - _numbers = value; - RaisePropertyChanged(() => Numbers); - } - } - public override string ToString() { return String.Format("Product Id: {0}, Quantity: {1}", ProductId, Quantity); diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/User/PaymentInfo.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/User/PaymentInfo.cs index 21b095cee..fc38a7856 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/User/PaymentInfo.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/User/PaymentInfo.cs @@ -3,7 +3,6 @@ using System; namespace eShopOnContainers.Core.Models.User { - public class PaymentInfo { public Guid Id { get; set; } diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/User/UserInfo.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/User/UserInfo.cs new file mode 100644 index 000000000..4b70e36e2 --- /dev/null +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/User/UserInfo.cs @@ -0,0 +1,55 @@ +using Newtonsoft.Json; + +namespace eShopOnContainers.Core.Models.User +{ + public class UserInfo + { + [JsonProperty("sub")] + public string UserId { get; set; } + + [JsonProperty("preferred_username")] + public string PreferredUsername { get; set; } + + [JsonProperty("name")] + public string Name { get; set; } + + [JsonProperty("last_name")] + public string LastName { get; set; } + + [JsonProperty("card_number")] + public string CardNumber { get; set; } + + [JsonProperty("card_holder")] + public string CardHolder { get; set; } + + [JsonProperty("card_security_number")] + public string CardSecurityNumber { get; set; } + + [JsonProperty("address_city")] + public string Address { get; set; } + + [JsonProperty("address_country")] + public string Country { get; set; } + + [JsonProperty("address_state")] + public string State { get; set; } + + [JsonProperty("address_street")] + public string Street { get; set; } + + [JsonProperty("address_zip_code")] + public string ZipCode { get; set; } + + [JsonProperty("email")] + public string Email { get; set; } + + [JsonProperty("email_verified")] + public bool EmailVerified { get; set; } + + [JsonProperty("phone_number")] + public string PhoneNumber { get; set; } + + [JsonProperty("phone_number_verified")] + public bool PhoneNumberVerified { get; set; } + } +} diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketMockService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketMockService.cs index 35e8cc941..7028b646a 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketMockService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketMockService.cs @@ -12,8 +12,8 @@ namespace eShopOnContainers.Core.Services.Basket BuyerId = "9245fe4a-d402-451c-b9ed-9c1a04247482", Items = new List { - new BasketItem { Id = "1", PictureUrl = Device.OS != TargetPlatform.Windows ? "fake_product_01.png" : "Assets/fake_product_01.png", ProductId = "1", ProductName = ".NET Bot Blue Sweatshirt (M)", Quantity = 1, UnitPrice = 19.50M }, - new BasketItem { Id = "2", PictureUrl = Device.OS != TargetPlatform.Windows ? "fake_product_04.png" : "Assets/fake_product_04.png", ProductId = "4", ProductName = ".NET Black Cupt", Quantity = 1, UnitPrice = 17.00M } + new BasketItem { Id = "1", PictureUrl = Device.OS != TargetPlatform.Windows ? "fake_product_01.png" : "Assets/fake_product_01.png", ProductId = Common.Common.MockCatalogItemId01.ToString(), ProductName = ".NET Bot Blue Sweatshirt (M)", Quantity = 1, UnitPrice = 19.50M }, + new BasketItem { Id = "2", PictureUrl = Device.OS != TargetPlatform.Windows ? "fake_product_04.png" : "Assets/fake_product_04.png", ProductId = Common.Common.MockCatalogItemId04.ToString(), ProductName = ".NET Black Cupt", Quantity = 1, UnitPrice = 17.00M } } }; diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogMockService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogMockService.cs index d6eb77add..e8e757260 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogMockService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogMockService.cs @@ -1,5 +1,6 @@ using eShopOnContainers.Core.Extensions; using eShopOnContainers.Core.Models.Catalog; +using System; using System.Collections.ObjectModel; using System.Linq; using System.Threading.Tasks; @@ -23,11 +24,11 @@ namespace eShopOnContainers.Core.Services.Catalog private ObservableCollection MockCatalog = new ObservableCollection { - new CatalogItem { Id = "1", PictureUri = Device.OS != TargetPlatform.Windows ? "fake_product_01.png" : "Assets/fake_product_01.png", Name = ".NET Bot Blue Sweatshirt (M)", Price = 19.50M, CatalogBrand = "Visual Studio", CatalogType = "T-Shirt" }, - new CatalogItem { Id = "2", PictureUri = Device.OS != TargetPlatform.Windows ? "fake_product_02.png" : "Assets/fake_product_02.png", Name = ".NET Bot Purple Sweatshirt (M)", Price = 19.50M, CatalogBrand = "Visual Studio", CatalogType = "T-Shirt" }, - new CatalogItem { Id = "3", PictureUri = Device.OS != TargetPlatform.Windows ? "fake_product_03.png" : "Assets/fake_product_03.png", Name = ".NET Bot Black Sweatshirt (M)", Price = 19.95M, CatalogBrand = "Visual Studio", CatalogType = "T-Shirt" }, - new CatalogItem { Id = "4", PictureUri = Device.OS != TargetPlatform.Windows ? "fake_product_04.png" : "Assets/fake_product_04.png", Name = ".NET Black Cupt", Price = 17.00M, CatalogBrand = "Visual Studio", CatalogType = "Mug" }, - new CatalogItem { Id = "5", PictureUri = Device.OS != TargetPlatform.Windows ? "fake_product_05.png" : "Assets/fake_product_05.png", Name = "Azure Black Sweatshirt (M)", Price = 19.50M, CatalogBrand = "Azure", CatalogType = "T-Shirt" } + new CatalogItem { Id = Common.Common.MockCatalogItemId01.ToString(), PictureUri = Device.OS != TargetPlatform.Windows ? "fake_product_01.png" : "Assets/fake_product_01.png", Name = ".NET Bot Blue Sweatshirt (M)", Price = 19.50M, CatalogBrandId = 2, CatalogBrand = "Visual Studio", CatalogTypeId = 2, CatalogType = "T-Shirt" }, + new CatalogItem { Id = Common.Common.MockCatalogItemId02.ToString(), PictureUri = Device.OS != TargetPlatform.Windows ? "fake_product_02.png" : "Assets/fake_product_02.png", Name = ".NET Bot Purple Sweatshirt (M)", Price = 19.50M, CatalogBrandId = 2, CatalogBrand = "Visual Studio", CatalogTypeId = 2, CatalogType = "T-Shirt" }, + new CatalogItem { Id = Common.Common.MockCatalogItemId03.ToString(), PictureUri = Device.OS != TargetPlatform.Windows ? "fake_product_03.png" : "Assets/fake_product_03.png", Name = ".NET Bot Black Sweatshirt (M)", Price = 19.95M, CatalogBrandId = 2, CatalogBrand = "Visual Studio", CatalogTypeId = 2, CatalogType = "T-Shirt" }, + new CatalogItem { Id = Common.Common.MockCatalogItemId04.ToString(), PictureUri = Device.OS != TargetPlatform.Windows ? "fake_product_04.png" : "Assets/fake_product_04.png", Name = ".NET Black Cupt", Price = 17.00M, CatalogBrandId = 2, CatalogBrand = "Visual Studio", CatalogTypeId = 1, CatalogType = "Mug" }, + new CatalogItem { Id = Common.Common.MockCatalogItemId05.ToString(), PictureUri = Device.OS != TargetPlatform.Windows ? "fake_product_05.png" : "Assets/fake_product_05.png", Name = "Azure Black Sweatshirt (M)", Price = 19.50M, CatalogBrandId = 1, CatalogBrand = "Azure", CatalogTypeId = 2, CatalogType = "T-Shirt" } }; public async Task> GetCatalogAsync() @@ -43,7 +44,7 @@ namespace eShopOnContainers.Core.Services.Catalog return MockCatalog .Where(c => c.CatalogBrandId == catalogBrandId && - c.CatalogTypeId == catalogTypeId) + c.CatalogTypeId == catalogTypeId) .ToObservableCollection(); } diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogService.cs index 9234e4059..2c6eee815 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogService.cs @@ -30,7 +30,10 @@ namespace eShopOnContainers.Core.Services.Catalog CatalogRoot catalog = await _requestProvider.GetAsync(uri); - return catalog?.Data?.ToObservableCollection(); + if (catalog?.Data != null) + return catalog?.Data.ToObservableCollection(); + else + return new ObservableCollection(); } catch { @@ -51,7 +54,10 @@ namespace eShopOnContainers.Core.Services.Catalog CatalogRoot catalog = await _requestProvider.GetAsync(uri); - return catalog?.Data?.ToObservableCollection(); + if (catalog?.Data != null) + return catalog?.Data.ToObservableCollection(); + else + return new ObservableCollection(); } catch { @@ -77,7 +83,10 @@ namespace eShopOnContainers.Core.Services.Catalog IEnumerable brands = await _requestProvider.GetAsync>(uri); - return brands?.ToObservableCollection(); + if (brands != null) + return brands?.ToObservableCollection(); + else + return new ObservableCollection(); } catch { @@ -98,7 +107,10 @@ namespace eShopOnContainers.Core.Services.Catalog IEnumerable types = await _requestProvider.GetAsync>(uri); - return types?.ToObservableCollection(); + if (types != null) + return types.ToObservableCollection(); + else + return new ObservableCollection(); } catch { diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Common/Common.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Common/Common.cs new file mode 100644 index 000000000..852bb0f42 --- /dev/null +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Common/Common.cs @@ -0,0 +1,13 @@ +using System; + +namespace eShopOnContainers.Core.Services.Common +{ + public static class Common + { + public static Guid MockCatalogItemId01 = new Guid("0f8fad5b-d9cb-469f-a165-708677289501"); + public static Guid MockCatalogItemId02 = new Guid("0f8fad5b-d9cb-469f-a165-708677289502"); + public static Guid MockCatalogItemId03 = new Guid("0f8fad5b-d9cb-469f-a165-708677289503"); + public static Guid MockCatalogItemId04 = new Guid("0f8fad5b-d9cb-469f-a165-708677289504"); + public static Guid MockCatalogItemId05 = new Guid("0f8fad5b-d9cb-469f-a165-708677289505"); + } +} diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderMockService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderMockService.cs index 8c90c5041..41a81f53a 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderMockService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderMockService.cs @@ -52,8 +52,8 @@ namespace eShopOnContainers.Core.Services.Order private static List MockOrderItems = new List() { - new OrderItem { OrderId = Guid.NewGuid(), ProductId = "1", Discount = 15, ProductName = ".NET Bot Blue Sweatshirt (M)", Quantity = 1, UnitPrice = 16.50M }, - new OrderItem { OrderId = Guid.NewGuid(), ProductId = "3", Discount = 0, ProductName = ".NET Bot Black Sweatshirt (M)", Quantity = 2, UnitPrice = 19.95M } + new OrderItem { OrderId = Guid.NewGuid(), ProductId = Common.Common.MockCatalogItemId01, Discount = 15, ProductName = ".NET Bot Blue Sweatshirt (M)", Quantity = 1, UnitPrice = 16.50M }, + new OrderItem { OrderId = Guid.NewGuid(), ProductId = Common.Common.MockCatalogItemId03, Discount = 0, ProductName = ".NET Bot Black Sweatshirt (M)", Quantity = 2, UnitPrice = 19.95M } }; private static List MockCardTypes = new List() diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/User/IUserService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/User/IUserService.cs index 5bb50ccf1..5fac81501 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/User/IUserService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/User/IUserService.cs @@ -5,7 +5,6 @@ namespace eShopOnContainers.Core.Services.User { public interface IUserService { - Task
GetAddressAsync(); - Task GetPaymentInfoAsync(); + Task GetUserInfoAsync(string authToken); } } diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/User/UserMockService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/User/UserMockService.cs index 0b989b78c..69837c475 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/User/UserMockService.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/User/UserMockService.cs @@ -1,56 +1,36 @@ using System; using eShopOnContainers.Core.Models.User; using System.Threading.Tasks; -using eShopOnContainers.Core.Models.Orders; namespace eShopOnContainers.Core.Services.User { public class UserMockService : IUserService { - private static DateTime MockExpirationDate = DateTime.Now.AddYears(5); - - private Address MockAdress = new Address + private UserInfo MockUserInfo = new UserInfo { - Id = Guid.NewGuid(), - City = "Seattle, WA", + UserId = Guid.NewGuid().ToString(), + Name = "Jhon", + LastName = "Doe", + PreferredUsername = "Jdoe", + Email = "jdoe@eshop.com", + EmailVerified = true, + PhoneNumber = "202-555-0165", + PhoneNumberVerified = true, + Address = "Seattle, WA", Street = "120 E 87th Street", - CountryCode = "98122", + ZipCode = "98101", Country = "United States", - Latitude = 40.785091, - Longitude = -73.968285, State = "Seattle", - StateCode = "WA", - ZipCode = "98101" - }; - - private PaymentInfo MockPaymentInfo = new PaymentInfo - { - Id = Guid.NewGuid(), - CardHolderName = "American Express", CardNumber = "378282246310005", - CardType = new CardType - { - Id = 3, - Name = "MasterCard" - }, - Expiration = MockExpirationDate.ToString(), - ExpirationMonth = MockExpirationDate.Month, - ExpirationYear = MockExpirationDate.Year, - SecurityNumber = "123" + CardHolder = "American Express", + CardSecurityNumber = "1234" }; - public async Task
GetAddressAsync() - { - await Task.Delay(500); - - return MockAdress; - } - - public async Task GetPaymentInfoAsync() + public async Task GetUserInfoAsync(string authToken) { await Task.Delay(500); - return MockPaymentInfo; + return MockUserInfo; } } -} +} \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/User/UserService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/User/UserService.cs new file mode 100644 index 000000000..1c4bb7e83 --- /dev/null +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/User/UserService.cs @@ -0,0 +1,36 @@ +using eShopOnContainers.Core.Services.RequestProvider; +using System; +using System.Threading.Tasks; +using eShopOnContainers.Core.Models.User; + +namespace eShopOnContainers.Core.Services.User +{ + public class UserService : IUserService + { + private readonly IRequestProvider _requestProvider; + + public UserService(IRequestProvider requestProvider) + { + _requestProvider = requestProvider; + } + + public async Task GetUserInfoAsync(string authToken) + { + try + { + UriBuilder builder = new UriBuilder(GlobalSetting.Instance.UserInfoEndpoint); + + string uri = builder.ToString(); + + var userInfo = + await _requestProvider.GetAsync(uri, authToken); + + return userInfo; + } + catch + { + return new UserInfo(); + } + } + } +} \ No newline at end of file diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/MessengerKeys.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/MessengerKeys.cs index 4b0e7432f..2558b94be 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/MessengerKeys.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/MessengerKeys.cs @@ -8,9 +8,6 @@ // Update Basket public const string UpdateBasket = "UpdateBasket"; - // Update product basket - public const string UpdateProduct = "UpdateProduct"; - // Filter public const string Filter = "Filter"; diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs index ac299a7c5..859ba811e 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs @@ -73,7 +73,7 @@ namespace eShopOnContainers.ViewModels.Base _unityContainer.RegisterInstance(new CatalogService(requestProvider)); _unityContainer.RegisterInstance(new BasketService(requestProvider)); _unityContainer.RegisterInstance(new OrderService(requestProvider)); - _unityContainer.RegisterInstance(new UserMockService()); + _unityContainer.RegisterInstance(new UserService(requestProvider)); UseMockService = false; } diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/BasketViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/BasketViewModel.cs index 60b656a41..065f4549d 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/BasketViewModel.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/BasketViewModel.cs @@ -63,11 +63,13 @@ namespace eShopOnContainers.Core.ViewModels } public ICommand CheckoutCommand => new Command(Checkout); - + public override Task InitializeAsync(object navigationData) { MessagingCenter.Subscribe>(this, MessengerKeys.UpdateBasket, (sender, arg) => { + MessagingCenter.Unsubscribe>(this, MessengerKeys.UpdateBasket); + foreach (var basketItem in arg) { BadgeCount += basketItem.Quantity; @@ -77,16 +79,13 @@ namespace eShopOnContainers.Core.ViewModels MessagingCenter.Subscribe(this, MessengerKeys.AddProduct, (sender, arg) => { + MessagingCenter.Unsubscribe(this, MessengerKeys.AddProduct); + BadgeCount++; AddCatalogItem(arg); }); - MessagingCenter.Subscribe(this, MessengerKeys.UpdateProduct, (sender) => - { - ReCalculateTotal(); - }); - BasketItems = new ObservableCollection(); return base.InitializeAsync(navigationData); @@ -135,13 +134,12 @@ namespace eShopOnContainers.Core.ViewModels Total += (orderItem.Quantity * orderItem.UnitPrice); } - - var shippingAddress = await _userService.GetAddressAsync(); var authToken = Settings.AuthAccessToken; + var userInfo = await _userService.GetUserInfoAsync(authToken); await _basketService.UpdateBasketAsync(new CustomerBasket { - BuyerId = shippingAddress.Id.ToString(), + BuyerId = userInfo.UserId, Items = BasketItems.ToList() }, authToken); } diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CatalogViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CatalogViewModel.cs index 1b37ba768..338c239d1 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CatalogViewModel.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CatalogViewModel.cs @@ -104,10 +104,10 @@ namespace eShopOnContainers.Core.ViewModels Brands = await _productsService.GetCatalogBrandAsync(); Types = await _productsService.GetCatalogTypeAsync(); - var shippingAddress = await _userService.GetAddressAsync(); var authToken = Settings.AuthAccessToken; + var userInfo = await _userService.GetUserInfoAsync(authToken); - var basket = await _basketService.GetBasketAsync(shippingAddress.Id.ToString(), authToken); + var basket = await _basketService.GetBasketAsync(userInfo.UserId, authToken); if (basket != null && basket.Items.Any()) { diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs index d6133c8c5..755b4599a 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs @@ -78,8 +78,23 @@ namespace eShopOnContainers.Core.ViewModels OrderItems = orderItems; - ShippingAddress = await _userService.GetAddressAsync(); - var paymentInfo = await _userService.GetPaymentInfoAsync(); + var authToken = Settings.AuthAccessToken; + var userInfo = await _userService.GetUserInfoAsync(authToken); + + ShippingAddress = new Address + { + Street = userInfo.Street, + ZipCode = userInfo.ZipCode, + State = userInfo.State, + Country = userInfo.Country, + }; + + var paymentInfo = new PaymentInfo + { + CardNumber = userInfo.CardNumber, + CardHolderName = userInfo.CardHolder, + SecurityNumber = userInfo.CardSecurityNumber + }; Order = new Order { @@ -117,7 +132,8 @@ namespace eShopOnContainers.Core.ViewModels { orderItems.Add(new OrderItem { - ProductId = basketItem.ProductId, + // TODO: + //ProductId = basketItem.ProductId, ProductName = basketItem.ProductName, PictureUrl = basketItem.PictureUrl, Quantity = basketItem.Quantity, diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/LoginViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/LoginViewModel.cs index 6326b5f0f..057e67632 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/LoginViewModel.cs +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/LoginViewModel.cs @@ -2,6 +2,7 @@ using eShopOnContainers.Core.Models.User; using eShopOnContainers.Core.Services.Identity; using eShopOnContainers.Core.Services.OpenUrl; +using eShopOnContainers.Core.Services.User; using eShopOnContainers.Core.Validations; using eShopOnContainers.Core.ViewModels.Base; using eShopOnContainers.ViewModels.Base; @@ -20,16 +21,21 @@ namespace eShopOnContainers.Core.ViewModels private ValidatableObject _password; private bool _isMock; private bool _isValid; + private bool _isLogin; private string _authUrl; private IOpenUrlService _openUrlService; private IIdentityService _identityService; + private IUserService _userService; - public LoginViewModel(IOpenUrlService openUrlService, - IIdentityService identityService) + public LoginViewModel( + IOpenUrlService openUrlService, + IIdentityService identityService, + IUserService userService) { _openUrlService = openUrlService; _identityService = identityService; + _userService = userService; _userName = new ValidatableObject(); _password = new ValidatableObject(); @@ -91,6 +97,19 @@ namespace eShopOnContainers.Core.ViewModels } } + public bool IsLogin + { + get + { + return _isLogin; + } + set + { + _isLogin = value; + RaisePropertyChanged(() => IsLogin); + } + } + public string LoginUrl { get @@ -170,6 +189,7 @@ namespace eShopOnContainers.Core.ViewModels LoginUrl = _identityService.CreateAuthorizeRequest(); IsValid = true; + IsLogin = true; IsBusy = false; } @@ -188,7 +208,7 @@ namespace eShopOnContainers.Core.ViewModels { LoginUrl = logoutRequest; Settings.AuthAccessToken = string.Empty; - IsValid = true; + IsLogin = true; } } diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CheckoutView.xaml b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CheckoutView.xaml index e90257309..921d739f3 100644 --- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CheckoutView.xaml +++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CheckoutView.xaml @@ -156,10 +156,10 @@ Text="{Binding ShippingAddress.Street}" Style="{StaticResource AddressStyle}"/>