Skip to content

Commit 2ab7246

Browse files
committed
Changes in Basket Integration
1 parent 548d66d commit 2ab7246

10 files changed

Lines changed: 77 additions & 51 deletions

File tree

src/Mobile/eShopOnContainers/eShopOnContainers.Core/Controls/BindablePicker.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections;
3+
using System.Windows.Input;
34
using Xamarin.Forms;
45

56
namespace eShopOnContainers.Core.Controls
@@ -12,6 +13,9 @@ public class BindablePicker : Picker
1213
public static readonly BindableProperty SelectedItemProperty = BindableProperty.Create("SelectedItem",
1314
typeof(object), typeof(BindablePicker), null, BindingMode.TwoWay, propertyChanged: OnSelectedItemChanged);
1415

16+
public static readonly BindableProperty ItemSelectedCommandProperty = BindableProperty.Create("ItemSelectedCommand",
17+
typeof(ICommand), typeof(BindablePicker), null);
18+
1519
public BindablePicker()
1620
{
1721
SelectedIndexChanged += (o, e) =>
@@ -23,6 +27,7 @@ public BindablePicker()
2327
}
2428

2529
var index = 0;
30+
2631
foreach (var item in ItemsSource)
2732
{
2833
if (index == SelectedIndex)
@@ -54,6 +59,12 @@ public Object SelectedItem
5459
}
5560
}
5661

62+
public ICommand ItemSelectedCommand
63+
{
64+
get { return (ICommand)GetValue(ItemSelectedCommandProperty); }
65+
set { SetValue(ItemSelectedCommandProperty, value); }
66+
}
67+
5768
public event EventHandler<SelectedItemChangedEventArgs> ItemSelected;
5869

5970
private void InternalUpdateSelectedIndex()
@@ -107,6 +118,11 @@ private static void OnSelectedItemChanged(BindableObject bindable, object oldVal
107118
boundPicker.ItemSelected(boundPicker, new SelectedItemChangedEventArgs(newValue));
108119
}
109120

121+
if(boundPicker.ItemSelectedCommand != null)
122+
{
123+
boundPicker.ItemSelectedCommand.Execute(newValue);
124+
}
125+
110126
boundPicker.InternalUpdateSelectedIndex();
111127
}
112128
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,4 +105,4 @@ public override string ToString()
105105
return String.Format("Product Id: {0}, Quantity: {1}", ProductId, Quantity);
106106
}
107107
}
108-
}
108+
}

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

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,19 +29,29 @@ public async Task<CustomerBasket> GetBasketAsync(string guidUser, string token)
2929
return MockCustomBasket;
3030
}
3131

32-
public async Task<CustomerBasket> UpdateBasketAsync(CustomerBasket customerBasket)
32+
public async Task<CustomerBasket> UpdateBasketAsync(CustomerBasket customerBasket, string token)
3333
{
3434
await Task.Delay(500);
3535

36+
if (string.IsNullOrEmpty(token))
37+
{
38+
return new CustomerBasket();
39+
}
40+
3641
MockCustomBasket = customerBasket;
3742

3843
return MockCustomBasket;
3944
}
4045

41-
public async Task ClearBasketAsync(string guidUser)
46+
public async Task ClearBasketAsync(string guidUser, string token)
4247
{
4348
await Task.Delay(500);
4449

50+
if (string.IsNullOrEmpty(token))
51+
{
52+
return;
53+
}
54+
4555
if (!string.IsNullOrEmpty(guidUser))
4656
{
4757
MockCustomBasket.Items.Clear();

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,26 +39,26 @@ public async Task<CustomerBasket> GetBasketAsync(string guidUser, string token)
3939
}
4040
}
4141

42-
public async Task<CustomerBasket> UpdateBasketAsync(CustomerBasket customerBasket)
42+
public async Task<CustomerBasket> UpdateBasketAsync(CustomerBasket customerBasket, string token)
4343
{
4444
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BasketEndpoint);
4545

4646
string uri = builder.ToString();
4747

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

5050
return result;
5151
}
5252

53-
public async Task ClearBasketAsync(string guidUser)
53+
public async Task ClearBasketAsync(string guidUser, string token)
5454
{
5555
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BasketEndpoint);
5656

5757
builder.Path = guidUser;
5858

5959
string uri = builder.ToString();
6060

61-
await _requestProvider.DeleteAsync(uri);
61+
await _requestProvider.DeleteAsync(uri, token);
6262
}
6363
}
6464
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace eShopOnContainers.Core.Services.Basket
66
public interface IBasketService
77
{
88
Task<CustomerBasket> GetBasketAsync(string guidUser, string token);
9-
Task<CustomerBasket> UpdateBasketAsync(CustomerBasket customerBasket);
10-
Task ClearBasketAsync(string guidUser);
9+
Task<CustomerBasket> UpdateBasketAsync(CustomerBasket customerBasket, string token);
10+
Task ClearBasketAsync(string guidUser, string token);
1111
}
1212
}

src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/IRequestProvider.cs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,16 @@ namespace eShopOnContainers.Core.Services.RequestProvider
44
{
55
public interface IRequestProvider
66
{
7-
Task<TResult> GetAsync<TResult>(string uri);
7+
Task<TResult> GetAsync<TResult>(string uri, string token = "");
88

9-
Task<TResult> GetAsync<TResult>(string uri, string token);
9+
Task<TResult> PostAsync<TResult>(string uri, TResult data, string token = "");
1010

11-
Task<TResult> PostAsync<TResult>(string uri, TResult data);
11+
Task<TResult> PostAsync<TRequest, TResult>(string uri, TRequest data, string token = "");
1212

13-
Task<TResult> PostAsync<TRequest, TResult>(string uri, TRequest data);
13+
Task<TResult> PutAsync<TResult>(string uri, TResult data, string token = "");
1414

15-
Task<TResult> PutAsync<TResult>(string uri, TResult data);
15+
Task<TResult> PutAsync<TRequest, TResult>(string uri, TRequest data, string token = "");
1616

17-
Task<TResult> PutAsync<TRequest, TResult>(string uri, TRequest data);
18-
19-
Task DeleteAsync(string uri);
17+
Task DeleteAsync(string uri, string token = "");
2018
}
2119
}

src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/RequestProvider.cs

Lines changed: 18 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ public RequestProvider()
2626
_serializerSettings.Converters.Add(new StringEnumConverter());
2727
}
2828

29-
public async Task<TResult> GetAsync<TResult>(string uri)
29+
public async Task<TResult> GetAsync<TResult>(string uri, string token = "")
3030
{
31-
HttpClient httpClient = CreateHttpClient();
31+
HttpClient httpClient = CreateHttpClient(token);
3232
HttpResponseMessage response = await httpClient.GetAsync(uri);
3333

3434
await HandleResponse(response);
@@ -41,30 +41,14 @@ public async Task<TResult> GetAsync<TResult>(string uri)
4141
return result;
4242
}
4343

44-
public async Task<TResult> GetAsync<TResult>(string uri, string token)
44+
public Task<TResult> PostAsync<TResult>(string uri, TResult data, string token = "")
4545
{
46-
HttpClient httpClient = CreateHttpClient();
47-
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
48-
HttpResponseMessage response = await httpClient.GetAsync(uri);
49-
50-
await HandleResponse(response);
51-
52-
string serialized = await response.Content.ReadAsStringAsync();
53-
54-
TResult result = await Task.Run(() =>
55-
JsonConvert.DeserializeObject<TResult>(serialized, _serializerSettings));
56-
57-
return result;
58-
}
59-
60-
public Task<TResult> PostAsync<TResult>(string uri, TResult data)
61-
{
62-
return PostAsync<TResult, TResult>(uri, data);
46+
return PostAsync<TResult, TResult>(uri, data, token);
6347
}
6448

65-
public async Task<TResult> PostAsync<TRequest, TResult>(string uri, TRequest data)
49+
public async Task<TResult> PostAsync<TRequest, TResult>(string uri, TRequest data, string token = "")
6650
{
67-
HttpClient httpClient = CreateHttpClient();
51+
HttpClient httpClient = CreateHttpClient(token);
6852
string serialized = await Task.Run(() => JsonConvert.SerializeObject(data, _serializerSettings));
6953
HttpResponseMessage response = await httpClient.PostAsync(uri, new StringContent(serialized, Encoding.UTF8, "application/json"));
7054

@@ -75,14 +59,14 @@ public async Task<TResult> PostAsync<TRequest, TResult>(string uri, TRequest dat
7559
return await Task.Run(() => JsonConvert.DeserializeObject<TResult>(responseData, _serializerSettings));
7660
}
7761

78-
public Task<TResult> PutAsync<TResult>(string uri, TResult data)
62+
public Task<TResult> PutAsync<TResult>(string uri, TResult data, string token = "")
7963
{
80-
return PutAsync<TResult, TResult>(uri, data);
64+
return PutAsync<TResult, TResult>(uri, data, token);
8165
}
8266

83-
public async Task<TResult> PutAsync<TRequest, TResult>(string uri, TRequest data)
67+
public async Task<TResult> PutAsync<TRequest, TResult>(string uri, TRequest data, string token = "")
8468
{
85-
HttpClient httpClient = CreateHttpClient();
69+
HttpClient httpClient = CreateHttpClient(token);
8670
string serialized = await Task.Run(() => JsonConvert.SerializeObject(data, _serializerSettings));
8771
HttpResponseMessage response = await httpClient.PutAsync(uri, new StringContent(serialized, Encoding.UTF8, "application/json"));
8872

@@ -93,19 +77,24 @@ public async Task<TResult> PutAsync<TRequest, TResult>(string uri, TRequest data
9377
return await Task.Run(() => JsonConvert.DeserializeObject<TResult>(responseData, _serializerSettings));
9478
}
9579

96-
public async Task DeleteAsync(string uri)
80+
public async Task DeleteAsync(string uri, string token = "")
9781
{
98-
HttpClient httpClient = CreateHttpClient();
82+
HttpClient httpClient = CreateHttpClient(token);
9983

10084
await httpClient.DeleteAsync(uri);
10185
}
10286

103-
private HttpClient CreateHttpClient()
87+
private HttpClient CreateHttpClient(string token = "")
10488
{
10589
var httpClient = new HttpClient();
10690

10791
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
10892

93+
if (!string.IsNullOrEmpty(token))
94+
{
95+
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
96+
}
97+
10998
return httpClient;
11099
}
111100

src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/BasketViewModel.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using eShopOnContainers.Core.Models.Basket;
1+
using eShopOnContainers.Core.Helpers;
2+
using eShopOnContainers.Core.Models.Basket;
23
using eShopOnContainers.Core.Models.Catalog;
34
using eShopOnContainers.Core.Models.User;
45
using eShopOnContainers.Core.Services.Basket;
@@ -133,12 +134,14 @@ private void ReCalculateTotal()
133134
{
134135
Total += (orderItem.Quantity * orderItem.UnitPrice);
135136
}
136-
137+
138+
var authToken = Settings.AuthAccessToken;
139+
137140
_basketService.UpdateBasketAsync(new CustomerBasket
138141
{
139142
BuyerId = _user.GuidUser,
140143
Items = BasketItems.ToList()
141-
});
144+
}, authToken);
142145
}
143146

144147
private void Checkout()

src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
using System.Collections.Generic;
1414
using eShopOnContainers.Core.Services.Basket;
1515
using eShopOnContainers.Core.Services.Order;
16+
using eShopOnContainers.Core.Helpers;
1617

1718
namespace eShopOnContainers.Core.ViewModels
1819
{
@@ -94,8 +95,10 @@ public override async Task InitializeAsync(object navigationData)
9495

9596
private async void Checkout()
9697
{
98+
var authToken = Settings.AuthAccessToken;
99+
97100
await _orderService.CreateOrderAsync(Order);
98-
await _basketService.ClearBasketAsync(User.GuidUser);
101+
await _basketService.ClearBasketAsync(User.GuidUser, authToken);
99102

100103
await NavigationService.NavigateToAsync<MainViewModel>(new TabParameter { TabIndex = 1 });
101104
await NavigationService.RemoveLastFromBackStackAsync();

src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/LoginViewModel.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,9 +186,9 @@ private void Logout()
186186

187187
if(!string.IsNullOrEmpty(logoutRequest))
188188
{
189-
IsValid = false;
190189
LoginUrl = logoutRequest;
191190
Settings.AuthAccessToken = string.Empty;
191+
IsValid = true;
192192
}
193193
}
194194

@@ -209,6 +209,13 @@ private async void NavigateAsync(string url)
209209
}
210210
}
211211
}
212+
213+
/*
214+
if(url.Contains("endsession"))
215+
{
216+
await SignInAsync();
217+
}
218+
*/
212219
}
213220

214221
private bool Validate()

0 commit comments

Comments
 (0)