1- using Microsoft . AspNetCore . Authentication ;
2- using Microsoft . AspNetCore . Http ;
3- using Microsoft . eShopOnContainers . BuildingBlocks . Resilience . Http ;
4- using Microsoft . eShopOnContainers . WebMVC . ViewModels ;
1+ using Microsoft . eShopOnContainers . WebMVC . ViewModels ;
52using Microsoft . Extensions . Options ;
63using Newtonsoft . Json ;
74using System . Collections . Generic ;
85using System . Linq ;
6+ using System . Net . Http ;
97using System . Threading . Tasks ;
108using WebMVC . Infrastructure ;
119using WebMVC . Models ;
@@ -15,29 +13,26 @@ namespace Microsoft.eShopOnContainers.WebMVC.Services
1513 public class BasketService : IBasketService
1614 {
1715 private readonly IOptionsSnapshot < AppSettings > _settings ;
18- private readonly IHttpClient _apiClient ;
16+ private readonly HttpClient _apiClient ;
1917 private readonly string _basketByPassUrl ;
2018 private readonly string _purchaseUrl ;
21- private readonly IHttpContextAccessor _httpContextAccesor ;
2219
2320 private readonly string _bffUrl ;
2421
25- public BasketService ( IOptionsSnapshot < AppSettings > settings ,
26- IHttpContextAccessor httpContextAccesor , IHttpClient httpClient )
22+ public BasketService ( HttpClient httpClient , IOptionsSnapshot < AppSettings > settings )
2723 {
24+ _apiClient = httpClient ;
2825 _settings = settings ;
26+
2927 _basketByPassUrl = $ "{ _settings . Value . PurchaseUrl } /api/v1/b/basket";
3028 _purchaseUrl = $ "{ _settings . Value . PurchaseUrl } /api/v1";
31- _httpContextAccesor = httpContextAccesor ;
32- _apiClient = httpClient ;
3329 }
3430
3531 public async Task < Basket > GetBasket ( ApplicationUser user )
3632 {
37- var token = await GetUserTokenAsync ( ) ;
3833 var getBasketUri = API . Basket . GetBasket ( _basketByPassUrl , user . Id ) ;
3934
40- var dataString = await _apiClient . GetStringAsync ( getBasketUri , token ) ;
35+ var dataString = await _apiClient . GetStringAsync ( getBasketUri ) ;
4136
4237 return string . IsNullOrEmpty ( dataString ) ?
4338 new Basket ( ) { BuyerId = user . Id } :
@@ -46,10 +41,10 @@ public async Task<Basket> GetBasket(ApplicationUser user)
4641
4742 public async Task < Basket > UpdateBasket ( Basket basket )
4843 {
49- var token = await GetUserTokenAsync ( ) ;
5044 var updateBasketUri = API . Basket . UpdateBasket ( _basketByPassUrl ) ;
45+ var content = new StringContent ( JsonConvert . SerializeObject ( basket ) , System . Text . Encoding . UTF8 , "application/json" ) ;
5146
52- var response = await _apiClient . PostAsync ( updateBasketUri , basket , token ) ;
47+ var response = await _apiClient . PostAsync ( updateBasketUri , content ) ;
5348
5449 response . EnsureSuccessStatusCode ( ) ;
5550
@@ -58,65 +53,63 @@ public async Task<Basket> UpdateBasket(Basket basket)
5853
5954 public async Task Checkout ( BasketDTO basket )
6055 {
61- var token = await GetUserTokenAsync ( ) ;
6256 var updateBasketUri = API . Basket . CheckoutBasket ( _basketByPassUrl ) ;
57+ var content = new StringContent ( JsonConvert . SerializeObject ( basket ) , System . Text . Encoding . UTF8 , "application/json" ) ;
6358
64- var response = await _apiClient . PostAsync ( updateBasketUri , basket , token ) ;
59+ var response = await _apiClient . PostAsync ( updateBasketUri , content ) ;
6560
6661 response . EnsureSuccessStatusCode ( ) ;
6762 }
6863
6964 public async Task < Basket > SetQuantities ( ApplicationUser user , Dictionary < string , int > quantities )
7065 {
7166
72- var token = await GetUserTokenAsync ( ) ;
7367 var updateBasketUri = API . Purchase . UpdateBasketItem ( _purchaseUrl ) ;
74- var userId = user . Id ;
75-
76- var response = await _apiClient . PutAsync ( updateBasketUri , new
68+ var basketUpdate = new
7769 {
78- BasketId = userId ,
70+ BasketId = user . Id ,
7971 Updates = quantities . Select ( kvp => new
8072 {
8173 BasketItemId = kvp . Key ,
8274 NewQty = kvp . Value
8375 } ) . ToArray ( )
84- } , token ) ;
76+ } ;
77+
78+ var content = new StringContent ( JsonConvert . SerializeObject ( basketUpdate ) , System . Text . Encoding . UTF8 , "application/json" ) ;
79+
80+ var response = await _apiClient . PutAsync ( updateBasketUri , content ) ;
8581
8682 response . EnsureSuccessStatusCode ( ) ;
83+
8784 var jsonResponse = await response . Content . ReadAsStringAsync ( ) ;
85+
8886 return JsonConvert . DeserializeObject < Basket > ( jsonResponse ) ;
8987 }
9088
9189 public async Task < Order > GetOrderDraft ( string basketId )
9290 {
93- var token = await GetUserTokenAsync ( ) ;
9491 var draftOrderUri = API . Purchase . GetOrderDraft ( _purchaseUrl , basketId ) ;
95- var json = await _apiClient . GetStringAsync ( draftOrderUri , token ) ;
96- return JsonConvert . DeserializeObject < Order > ( json ) ;
92+ var response = await _apiClient . GetStringAsync ( draftOrderUri ) ;
93+
94+ return JsonConvert . DeserializeObject < Order > ( response ) ;
9795 }
9896
9997
10098
10199 public async Task AddItemToBasket ( ApplicationUser user , int productId )
102100 {
103- var token = await GetUserTokenAsync ( ) ;
104101 var updateBasketUri = API . Purchase . AddItemToBasket ( _purchaseUrl ) ;
105- var userId = user . Id ;
106102
107- var response = await _apiClient . PostAsync ( updateBasketUri , new
103+ var newItem = new
108104 {
109105 CatalogItemId = productId ,
110- BasketId = userId ,
106+ BasketId = user . Id ,
111107 Quantity = 1
112- } , token ) ;
108+ } ;
113109
114- }
110+ var content = new StringContent ( JsonConvert . SerializeObject ( newItem ) , System . Text . Encoding . UTF8 , "application/json" ) ;
115111
116- async Task < string > GetUserTokenAsync ( )
117- {
118- var context = _httpContextAccesor . HttpContext ;
119- return await context . GetTokenAsync ( "access_token" ) ;
112+ var response = await _apiClient . PostAsync ( updateBasketUri , content ) ;
120113 }
121114 }
122115}
0 commit comments