Skip to content

Commit 19da19f

Browse files
committed
Changes in client APIs integration
1 parent a042894 commit 19da19f

17 files changed

Lines changed: 189 additions & 59 deletions

File tree

eShopOnContainers.sln

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,8 @@ Global
427427
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|iPhone.Build.0 = Debug|x86
428428
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|iPhone.Deploy.0 = Debug|x86
429429
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
430+
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|iPhoneSimulator.Build.0 = Debug|x86
431+
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|iPhoneSimulator.Deploy.0 = Debug|x86
430432
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|x64.ActiveCfg = Debug|x64
431433
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|x64.Build.0 = Debug|x64
432434
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|x64.Deploy.0 = Debug|x64
@@ -657,6 +659,7 @@ Global
657659
{02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|iPhone.Build.0 = Debug|x86
658660
{02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|iPhone.Deploy.0 = Debug|x86
659661
{02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
662+
{02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|iPhoneSimulator.Build.0 = Debug|x86
660663
{02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|x64.ActiveCfg = Debug|x64
661664
{02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|x64.Build.0 = Debug|x64
662665
{02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|x64.Deploy.0 = Debug|x64
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
using System.Windows.Input;
2+
using Xamarin.Forms;
3+
4+
namespace eShopOnContainers.Core.Behaviors
5+
{
6+
public sealed class ItemTappedCommandListViewBehavior
7+
{
8+
public static readonly BindableProperty ItemTappedCommandProperty =
9+
BindableProperty.CreateAttached(
10+
"ItemTappedCommand",
11+
typeof(ICommand),
12+
typeof(ItemTappedCommandListViewBehavior),
13+
default(ICommand),
14+
BindingMode.OneWay,
15+
null,
16+
PropertyChanged);
17+
18+
private static void PropertyChanged(BindableObject bindable, object oldValue, object newValue)
19+
{
20+
var listView = bindable as ListView;
21+
if (listView != null)
22+
{
23+
listView.ItemTapped -= ListViewOnItemTapped;
24+
listView.ItemTapped += ListViewOnItemTapped;
25+
}
26+
}
27+
28+
private static void ListViewOnItemTapped(object sender, ItemTappedEventArgs e)
29+
{
30+
var list = sender as ListView;
31+
if (list != null && list.IsEnabled && !list.IsRefreshing)
32+
{
33+
list.SelectedItem = null;
34+
var command = GetItemTappedCommand(list);
35+
if (command != null && command.CanExecute(e.Item))
36+
{
37+
command.Execute(e.Item);
38+
}
39+
}
40+
}
41+
42+
public static ICommand GetItemTappedCommand(BindableObject bindableObject)
43+
{
44+
return (ICommand)bindableObject.GetValue(ItemTappedCommandProperty);
45+
}
46+
47+
public static void SetItemTappedCommand(BindableObject bindableObject, object value)
48+
{
49+
bindableObject.SetValue(ItemTappedCommandProperty, value);
50+
}
51+
}
52+
}

src/Mobile/eShopOnContainers/eShopOnContainers.Core/Converters/ToUpperConverter.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ public class ToUpperConverter : IValueConverter
88
{
99
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
1010
{
11-
return value.ToString().ToUpperInvariant();
11+
if (value != null)
12+
return value.ToString().ToUpperInvariant();
13+
else
14+
return value;
1215
}
1316

1417
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)

src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Basket/BasketItem.cs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
using System;
2+
using Xamarin.Forms;
23

34
namespace eShopOnContainers.Core.Models.Basket
45
{
5-
public class BasketItem
6+
public class BasketItem : BindableObject
67
{
8+
private int _quantity;
9+
710
public string Id { get; set; }
811

912
public string ProductId { get; set; }
@@ -12,7 +15,15 @@ public class BasketItem
1215

1316
public decimal UnitPrice { get; set; }
1417

15-
public int Quantity { get; set; }
18+
public int Quantity
19+
{
20+
get { return _quantity; }
21+
set
22+
{
23+
_quantity = value;
24+
OnPropertyChanged("Quantity");
25+
}
26+
}
1627

1728
public string PictureUrl { get; set; }
1829

src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/CardType.cs

Lines changed: 0 additions & 8 deletions
This file was deleted.
Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using System;
22
using System.Collections.Generic;
3-
using System.Linq;
43
using Newtonsoft.Json;
54

65
namespace eShopOnContainers.Core.Models.Orders
@@ -17,19 +16,25 @@ public Order()
1716

1817
public int SequenceNumber { get; set; }
1918

19+
[JsonProperty("date")]
2020
public DateTime OrderDate { get; set; }
2121

22+
[JsonProperty("status")]
2223
public OrderState State { get; set; }
2324

25+
[JsonProperty("city")]
2426
public string ShippingCity { get; set; }
2527

28+
[JsonProperty("street")]
2629
public string ShippingStreet { get; set; }
2730

31+
[JsonProperty("state")]
2832
public string ShippingState { get; set; }
2933

34+
[JsonProperty("country")]
3035
public string ShippingCountry { get; set; }
3136

32-
public string CardType { get; set; }
37+
public int CardTypeId { get; set; }
3338

3439
public string CardNumber { get; set; }
3540

@@ -39,22 +44,13 @@ public Order()
3944

4045
public string CardSecurityNumber { get; set; }
4146

42-
[JsonProperty("items")]
47+
[JsonProperty("orderitems")]
4348
public List<OrderItem> OrderItems { get; set; }
4449

45-
public decimal Total { get { return CalculateTotal(); } }
50+
[JsonProperty("total")]
51+
public decimal Total { get; set; }
4652

47-
public string OrderNumber { get { return CalculateOrderNumber(); } }
48-
49-
50-
private decimal CalculateTotal()
51-
{
52-
return OrderItems.Sum(x => x.Quantity * x.UnitPrice);
53-
}
54-
55-
private string CalculateOrderNumber()
56-
{
57-
return string.Format("{0}/{1}-{2}", OrderDate.Year, OrderDate.Month, SequenceNumber);
58-
}
53+
[JsonProperty("ordernumber")]
54+
public string OrderNumber { get; set; }
5955
}
6056
}

src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/OrderItem.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,25 @@
1-
using System;
1+
using Newtonsoft.Json;
2+
using System;
23

34
namespace eShopOnContainers.Core.Models.Orders
45
{
56
public class OrderItem
67
{
78
public string ProductId { get; set; }
8-
public Guid OrderId { get; set; }
9+
public Guid? OrderId { get; set; }
10+
11+
[JsonProperty("unitprice")]
912
public decimal UnitPrice { get; set; }
13+
14+
[JsonProperty("productname")]
1015
public string ProductName { get; set; }
16+
17+
[JsonProperty("pictureurl")]
1118
public string PictureUrl { get; set; }
19+
20+
[JsonProperty("units")]
1221
public int Quantity { get; set; }
22+
1323
public decimal Discount { get; set; }
1424
public decimal Total { get { return Quantity * UnitPrice; } }
1525

src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketService.cs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,20 @@ public async Task<CustomerBasket> GetBasketAsync(string guidUser, string token)
4141

4242
public async Task<CustomerBasket> UpdateBasketAsync(CustomerBasket customerBasket, string token)
4343
{
44-
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BasketEndpoint);
44+
try
45+
{
46+
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BasketEndpoint);
4547

46-
string uri = builder.ToString();
48+
string uri = builder.ToString();
4749

48-
var result = await _requestProvider.PostAsync(uri, customerBasket, token);
50+
var result = await _requestProvider.PostAsync(uri, customerBasket, token);
4951

50-
return result;
52+
return result;
53+
}
54+
catch
55+
{
56+
return new CustomerBasket();
57+
}
5158
}
5259

5360
public async Task ClearBasketAsync(string guidUser, string token)
@@ -58,7 +65,7 @@ public async Task ClearBasketAsync(string guidUser, string token)
5865

5966
string uri = builder.ToString();
6067

61-
await _requestProvider.DeleteAsync(uri, token);
68+
await _requestProvider.DeleteAsync(uri, token);
6269
}
6370
}
6471
}

src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Identity/IIdentityService.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
namespace eShopOnContainers.Core.Services.Identity
1+
using System.Threading.Tasks;
2+
3+
namespace eShopOnContainers.Core.Services.Identity
24
{
35
public interface IIdentityService
46
{

src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderMockService.cs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using System.Collections.ObjectModel;
77
using System.Linq;
88
using System.Threading.Tasks;
9+
using Xamarin.Forms;
910

1011
namespace eShopOnContainers.Core.Services.Order
1112
{
@@ -45,15 +46,15 @@ public class OrderMockService : IOrderService
4546

4647
private List<Models.Orders.Order> MockOrders = new List<Models.Orders.Order>()
4748
{
48-
new Models.Orders.Order { SequenceNumber = 123, OrderDate = DateTime.Now, State = OrderState.Delivered, OrderItems = MockOrderItems, CardType = MockPaymentInfo.CardType.ToString(), CardHolderName = MockPaymentInfo.CardHolderName, CardNumber = MockPaymentInfo.CardNumber, CardSecurityNumber = MockPaymentInfo.SecurityNumber, CardExpiration = new DateTime(MockPaymentInfo.ExpirationYear, MockPaymentInfo.ExpirationMonth, 1), ShippingCity = MockAdress.City, ShippingState = MockAdress.State, ShippingCountry = MockAdress.Country, ShippingStreet = MockAdress.Street },
49-
new Models.Orders.Order { SequenceNumber = 132, OrderDate = DateTime.Now, State = OrderState.Delivered, OrderItems = MockOrderItems, CardType = MockPaymentInfo.CardType.ToString(), CardHolderName = MockPaymentInfo.CardHolderName, CardNumber = MockPaymentInfo.CardNumber, CardSecurityNumber = MockPaymentInfo.SecurityNumber, CardExpiration = new DateTime(MockPaymentInfo.ExpirationYear, MockPaymentInfo.ExpirationMonth, 1), ShippingCity = MockAdress.City, ShippingState = MockAdress.State, ShippingCountry = MockAdress.Country, ShippingStreet = MockAdress.Street },
50-
new Models.Orders.Order { SequenceNumber = 231, OrderDate = DateTime.Now, State = OrderState.Delivered, OrderItems = MockOrderItems, CardType = MockPaymentInfo.CardType.ToString(), CardHolderName = MockPaymentInfo.CardHolderName, CardNumber = MockPaymentInfo.CardNumber, CardSecurityNumber = MockPaymentInfo.SecurityNumber, CardExpiration = new DateTime(MockPaymentInfo.ExpirationYear, MockPaymentInfo.ExpirationMonth, 1), ShippingCity = MockAdress.City, ShippingState = MockAdress.State, ShippingCountry = MockAdress.Country, ShippingStreet = MockAdress.Street },
49+
new Models.Orders.Order { OrderNumber = "1", SequenceNumber = 123, OrderDate = DateTime.Now, State = OrderState.Delivered, OrderItems = MockOrderItems, CardTypeId = MockPaymentInfo.CardType.Id, CardHolderName = MockPaymentInfo.CardHolderName, CardNumber = MockPaymentInfo.CardNumber, CardSecurityNumber = MockPaymentInfo.SecurityNumber, CardExpiration = new DateTime(MockPaymentInfo.ExpirationYear, MockPaymentInfo.ExpirationMonth, 1), ShippingCity = MockAdress.City, ShippingState = MockAdress.State, ShippingCountry = MockAdress.Country, ShippingStreet = MockAdress.Street, Total = 36.46M },
50+
new Models.Orders.Order { OrderNumber = "2", SequenceNumber = 132, OrderDate = DateTime.Now, State = OrderState.Delivered, OrderItems = MockOrderItems, CardTypeId = MockPaymentInfo.CardType.Id, CardHolderName = MockPaymentInfo.CardHolderName, CardNumber = MockPaymentInfo.CardNumber, CardSecurityNumber = MockPaymentInfo.SecurityNumber, CardExpiration = new DateTime(MockPaymentInfo.ExpirationYear, MockPaymentInfo.ExpirationMonth, 1), ShippingCity = MockAdress.City, ShippingState = MockAdress.State, ShippingCountry = MockAdress.Country, ShippingStreet = MockAdress.Street, Total = 36.46M },
51+
new Models.Orders.Order { OrderNumber = "3", SequenceNumber = 231, OrderDate = DateTime.Now, State = OrderState.Delivered, OrderItems = MockOrderItems, CardTypeId = MockPaymentInfo.CardType.Id, CardHolderName = MockPaymentInfo.CardHolderName, CardNumber = MockPaymentInfo.CardNumber, CardSecurityNumber = MockPaymentInfo.SecurityNumber, CardExpiration = new DateTime(MockPaymentInfo.ExpirationYear, MockPaymentInfo.ExpirationMonth, 1), ShippingCity = MockAdress.City, ShippingState = MockAdress.State, ShippingCountry = MockAdress.Country, ShippingStreet = MockAdress.Street, Total = 36.46M }
5152
};
5253

5354
private static List<OrderItem> MockOrderItems = new List<OrderItem>()
5455
{
55-
new OrderItem { OrderId = Guid.NewGuid(), ProductId = Common.Common.MockCatalogItemId01, Discount = 15, ProductName = ".NET Bot Blue Sweatshirt (M)", Quantity = 1, UnitPrice = 16.50M },
56-
new OrderItem { OrderId = Guid.NewGuid(), ProductId = Common.Common.MockCatalogItemId03, Discount = 0, ProductName = ".NET Bot Black Sweatshirt (M)", Quantity = 2, UnitPrice = 19.95M }
56+
new OrderItem { OrderId = Guid.NewGuid(), ProductId = Common.Common.MockCatalogItemId01, Discount = 15, ProductName = ".NET Bot Blue Sweatshirt (M)", Quantity = 1, UnitPrice = 16.50M, PictureUrl = Device.OS != TargetPlatform.Windows ? "fake_product_01.png" : "Assets/fake_product_01.png" },
57+
new OrderItem { OrderId = Guid.NewGuid(), ProductId = Common.Common.MockCatalogItemId03, Discount = 0, ProductName = ".NET Bot Black Sweatshirt (M)", Quantity = 2, UnitPrice = 19.95M, PictureUrl = Device.OS != TargetPlatform.Windows ? "fake_product_03.png" : "Assets/fake_product_03.png" }
5758
};
5859

5960
private static List<CardType> MockCardTypes = new List<CardType>()
@@ -88,7 +89,9 @@ public async Task CreateOrderAsync(Models.Orders.Order newOrder, string token)
8889
await Task.Delay(500);
8990

9091
if (!string.IsNullOrEmpty(token))
91-
return MockOrders.FirstOrDefault(o => o.SequenceNumber == orderId);
92+
return MockOrders
93+
.FirstOrDefault(o => o.OrderNumber.Equals(orderId.ToString(),
94+
StringComparison.CurrentCultureIgnoreCase));
9295
else
9396
return new Models.Orders.Order();
9497
}

0 commit comments

Comments
 (0)