Browse Source

Changes in Basket Integration

pull/49/merge
Javier Suárez Ruiz 8 years ago
parent
commit
2ab72466fc
10 changed files with 77 additions and 51 deletions
  1. +16
    -0
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/Controls/BindablePicker.cs
  2. +1
    -1
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Basket/BasketItem.cs
  3. +12
    -2
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketMockService.cs
  4. +4
    -4
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketService.cs
  5. +2
    -2
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/IBasketService.cs
  6. +6
    -8
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/IRequestProvider.cs
  7. +18
    -29
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/RequestProvider.cs
  8. +6
    -3
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/BasketViewModel.cs
  9. +4
    -1
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs
  10. +8
    -1
      src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/LoginViewModel.cs

+ 16
- 0
src/Mobile/eShopOnContainers/eShopOnContainers.Core/Controls/BindablePicker.cs View File

@ -1,5 +1,6 @@
using System;
using System.Collections;
using System.Windows.Input;
using Xamarin.Forms;
namespace eShopOnContainers.Core.Controls
@ -12,6 +13,9 @@ namespace eShopOnContainers.Core.Controls
public static readonly BindableProperty SelectedItemProperty = BindableProperty.Create("SelectedItem",
typeof(object), typeof(BindablePicker), null, BindingMode.TwoWay, propertyChanged: OnSelectedItemChanged);
public static readonly BindableProperty ItemSelectedCommandProperty = BindableProperty.Create("ItemSelectedCommand",
typeof(ICommand), typeof(BindablePicker), null);
public BindablePicker()
{
SelectedIndexChanged += (o, e) =>
@ -23,6 +27,7 @@ namespace eShopOnContainers.Core.Controls
}
var index = 0;
foreach (var item in ItemsSource)
{
if (index == SelectedIndex)
@ -54,6 +59,12 @@ namespace eShopOnContainers.Core.Controls
}
}
public ICommand ItemSelectedCommand
{
get { return (ICommand)GetValue(ItemSelectedCommandProperty); }
set { SetValue(ItemSelectedCommandProperty, value); }
}
public event EventHandler<SelectedItemChangedEventArgs> ItemSelected;
private void InternalUpdateSelectedIndex()
@ -107,6 +118,11 @@ namespace eShopOnContainers.Core.Controls
boundPicker.ItemSelected(boundPicker, new SelectedItemChangedEventArgs(newValue));
}
if(boundPicker.ItemSelectedCommand != null)
{
boundPicker.ItemSelectedCommand.Execute(newValue);
}
boundPicker.InternalUpdateSelectedIndex();
}
}


+ 1
- 1
src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Basket/BasketItem.cs View File

@ -105,4 +105,4 @@ namespace eShopOnContainers.Core.Models.Basket
return String.Format("Product Id: {0}, Quantity: {1}", ProductId, Quantity);
}
}
}
}

+ 12
- 2
src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketMockService.cs View File

@ -29,19 +29,29 @@ namespace eShopOnContainers.Core.Services.Basket
return MockCustomBasket;
}
public async Task<CustomerBasket> UpdateBasketAsync(CustomerBasket customerBasket)
public async Task<CustomerBasket> UpdateBasketAsync(CustomerBasket customerBasket, string token)
{
await Task.Delay(500);
if (string.IsNullOrEmpty(token))
{
return new CustomerBasket();
}
MockCustomBasket = customerBasket;
return MockCustomBasket;
}
public async Task ClearBasketAsync(string guidUser)
public async Task ClearBasketAsync(string guidUser, string token)
{
await Task.Delay(500);
if (string.IsNullOrEmpty(token))
{
return;
}
if (!string.IsNullOrEmpty(guidUser))
{
MockCustomBasket.Items.Clear();


+ 4
- 4
src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketService.cs View File

@ -39,18 +39,18 @@ namespace eShopOnContainers.Core.Services.Basket
}
}
public async Task<CustomerBasket> UpdateBasketAsync(CustomerBasket customerBasket)
public async Task<CustomerBasket> UpdateBasketAsync(CustomerBasket customerBasket, string token)
{
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BasketEndpoint);
string uri = builder.ToString();
var result = await _requestProvider.PostAsync(uri, customerBasket);
var result = await _requestProvider.PostAsync(uri, customerBasket, token);
return result;
}
public async Task ClearBasketAsync(string guidUser)
public async Task ClearBasketAsync(string guidUser, string token)
{
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BasketEndpoint);
@ -58,7 +58,7 @@ namespace eShopOnContainers.Core.Services.Basket
string uri = builder.ToString();
await _requestProvider.DeleteAsync(uri);
await _requestProvider.DeleteAsync(uri, token);
}
}
}

+ 2
- 2
src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/IBasketService.cs View File

@ -6,7 +6,7 @@ namespace eShopOnContainers.Core.Services.Basket
public interface IBasketService
{
Task<CustomerBasket> GetBasketAsync(string guidUser, string token);
Task<CustomerBasket> UpdateBasketAsync(CustomerBasket customerBasket);
Task ClearBasketAsync(string guidUser);
Task<CustomerBasket> UpdateBasketAsync(CustomerBasket customerBasket, string token);
Task ClearBasketAsync(string guidUser, string token);
}
}

+ 6
- 8
src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/IRequestProvider.cs View File

@ -4,18 +4,16 @@ namespace eShopOnContainers.Core.Services.RequestProvider
{
public interface IRequestProvider
{
Task<TResult> GetAsync<TResult>(string uri);
Task<TResult> GetAsync<TResult>(string uri, string token = "");
Task<TResult> GetAsync<TResult>(string uri, string token);
Task<TResult> PostAsync<TResult>(string uri, TResult data, string token = "");
Task<TResult> PostAsync<TResult>(string uri, TResult data);
Task<TResult> PostAsync<TRequest, TResult>(string uri, TRequest data, string token = "");
Task<TResult> PostAsync<TRequest, TResult>(string uri, TRequest data);
Task<TResult> PutAsync<TResult>(string uri, TResult data, string token = "");
Task<TResult> PutAsync<TResult>(string uri, TResult data);
Task<TResult> PutAsync<TRequest, TResult>(string uri, TRequest data, string token = "");
Task<TResult> PutAsync<TRequest, TResult>(string uri, TRequest data);
Task DeleteAsync(string uri);
Task DeleteAsync(string uri, string token = "");
}
}

+ 18
- 29
src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/RequestProvider.cs View File

@ -26,9 +26,9 @@ namespace eShopOnContainers.Core.Services.RequestProvider
_serializerSettings.Converters.Add(new StringEnumConverter());
}
public async Task<TResult> GetAsync<TResult>(string uri)
public async Task<TResult> GetAsync<TResult>(string uri, string token = "")
{
HttpClient httpClient = CreateHttpClient();
HttpClient httpClient = CreateHttpClient(token);
HttpResponseMessage response = await httpClient.GetAsync(uri);
await HandleResponse(response);
@ -41,30 +41,14 @@ namespace eShopOnContainers.Core.Services.RequestProvider
return result;
}
public async Task<TResult> GetAsync<TResult>(string uri, string token)
public Task<TResult> PostAsync<TResult>(string uri, TResult data, string token = "")
{
HttpClient httpClient = CreateHttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
HttpResponseMessage response = await httpClient.GetAsync(uri);
await HandleResponse(response);
string serialized = await response.Content.ReadAsStringAsync();
TResult result = await Task.Run(() =>
JsonConvert.DeserializeObject<TResult>(serialized, _serializerSettings));
return result;
}
public Task<TResult> PostAsync<TResult>(string uri, TResult data)
{
return PostAsync<TResult, TResult>(uri, data);
return PostAsync<TResult, TResult>(uri, data, token);
}
public async Task<TResult> PostAsync<TRequest, TResult>(string uri, TRequest data)
public async Task<TResult> PostAsync<TRequest, TResult>(string uri, TRequest data, string token = "")
{
HttpClient httpClient = CreateHttpClient();
HttpClient httpClient = CreateHttpClient(token);
string serialized = await Task.Run(() => JsonConvert.SerializeObject(data, _serializerSettings));
HttpResponseMessage response = await httpClient.PostAsync(uri, new StringContent(serialized, Encoding.UTF8, "application/json"));
@ -75,14 +59,14 @@ namespace eShopOnContainers.Core.Services.RequestProvider
return await Task.Run(() => JsonConvert.DeserializeObject<TResult>(responseData, _serializerSettings));
}
public Task<TResult> PutAsync<TResult>(string uri, TResult data)
public Task<TResult> PutAsync<TResult>(string uri, TResult data, string token = "")
{
return PutAsync<TResult, TResult>(uri, data);
return PutAsync<TResult, TResult>(uri, data, token);
}
public async Task<TResult> PutAsync<TRequest, TResult>(string uri, TRequest data)
public async Task<TResult> PutAsync<TRequest, TResult>(string uri, TRequest data, string token = "")
{
HttpClient httpClient = CreateHttpClient();
HttpClient httpClient = CreateHttpClient(token);
string serialized = await Task.Run(() => JsonConvert.SerializeObject(data, _serializerSettings));
HttpResponseMessage response = await httpClient.PutAsync(uri, new StringContent(serialized, Encoding.UTF8, "application/json"));
@ -93,19 +77,24 @@ namespace eShopOnContainers.Core.Services.RequestProvider
return await Task.Run(() => JsonConvert.DeserializeObject<TResult>(responseData, _serializerSettings));
}
public async Task DeleteAsync(string uri)
public async Task DeleteAsync(string uri, string token = "")
{
HttpClient httpClient = CreateHttpClient();
HttpClient httpClient = CreateHttpClient(token);
await httpClient.DeleteAsync(uri);
}
private HttpClient CreateHttpClient()
private HttpClient CreateHttpClient(string token = "")
{
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
if (!string.IsNullOrEmpty(token))
{
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
}
return httpClient;
}


+ 6
- 3
src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/BasketViewModel.cs View File

@ -1,4 +1,5 @@
using eShopOnContainers.Core.Models.Basket;
using eShopOnContainers.Core.Helpers;
using eShopOnContainers.Core.Models.Basket;
using eShopOnContainers.Core.Models.Catalog;
using eShopOnContainers.Core.Models.User;
using eShopOnContainers.Core.Services.Basket;
@ -133,12 +134,14 @@ namespace eShopOnContainers.Core.ViewModels
{
Total += (orderItem.Quantity * orderItem.UnitPrice);
}
var authToken = Settings.AuthAccessToken;
_basketService.UpdateBasketAsync(new CustomerBasket
{
BuyerId = _user.GuidUser,
Items = BasketItems.ToList()
});
}, authToken);
}
private void Checkout()


+ 4
- 1
src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs View File

@ -13,6 +13,7 @@ using eShopOnContainers.Core.Models.Basket;
using System.Collections.Generic;
using eShopOnContainers.Core.Services.Basket;
using eShopOnContainers.Core.Services.Order;
using eShopOnContainers.Core.Helpers;
namespace eShopOnContainers.Core.ViewModels
{
@ -94,8 +95,10 @@ namespace eShopOnContainers.Core.ViewModels
private async void Checkout()
{
var authToken = Settings.AuthAccessToken;
await _orderService.CreateOrderAsync(Order);
await _basketService.ClearBasketAsync(User.GuidUser);
await _basketService.ClearBasketAsync(User.GuidUser, authToken);
await NavigationService.NavigateToAsync<MainViewModel>(new TabParameter { TabIndex = 1 });
await NavigationService.RemoveLastFromBackStackAsync();


+ 8
- 1
src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/LoginViewModel.cs View File

@ -186,9 +186,9 @@ namespace eShopOnContainers.Core.ViewModels
if(!string.IsNullOrEmpty(logoutRequest))
{
IsValid = false;
LoginUrl = logoutRequest;
Settings.AuthAccessToken = string.Empty;
IsValid = true;
}
}
@ -209,6 +209,13 @@ namespace eShopOnContainers.Core.ViewModels
}
}
}
/*
if(url.Contains("endsession"))
{
await SignInAsync();
}
*/
}
private bool Validate()


Loading…
Cancel
Save