Skip to content

Commit 63e20bb

Browse files
author
ericuss
committed
refactor mobile bff
1 parent 454525d commit 63e20bb

9 files changed

Lines changed: 125 additions & 93 deletions

File tree

docker-compose.override.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,7 @@ services:
286286
- urls__orders=http://ordering.api
287287
- urls__identity=http://identity.api
288288
- urls__grpcBasket=http://10.0.75.1:5580
289+
- urls__grpcCatalog=http://10.0.75.1:9101
289290
- urls__grpcOrdering=http://10.0.75.1:5581
290291
- CatalogUrlHC=http://catalog.api/hc
291292
- OrderingUrlHC=http://ordering.api/hc

src/ApiGateways/Mobile.Bff.Shopping/aggregator/Config/UrlsConfig.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public class OrdersOperations
2828
public string Catalog { get; set; }
2929
public string Orders { get; set; }
3030
public string GrpcBasket { get; set; }
31+
public string GrpcCatalog { get; set; }
3132
public string GrpcOrdering { get; set; }
3233
}
3334
}

src/ApiGateways/Mobile.Bff.Shopping/aggregator/Services/BasketService.cs

Lines changed: 15 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -27,50 +27,28 @@ public BasketService(HttpClient httpClient, IOptions<UrlsConfig> config, ILogger
2727

2828
public async Task<BasketData> GetById(string id)
2929
{
30-
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
31-
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2Support", true);
32-
33-
using (var httpClientHandler = new HttpClientHandler())
30+
return await GrpcCallerService.CallService(_urls.GrpcBasket, async httpClient =>
3431
{
35-
httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; };
36-
using (var httpClient = new HttpClient(httpClientHandler))
37-
{
38-
//httpClient.BaseAddress = new Uri("http://10.0.75.1:5580");
39-
httpClient.BaseAddress = new Uri(_urls.GrpcBasket);
40-
41-
_logger.LogDebug("Creating grpc client for basket {@httpClient.BaseAddress} ", httpClient.BaseAddress);
42-
43-
var client = GrpcClient.Create<Basket.BasketClient>(httpClient);
44-
45-
_logger.LogDebug("grpc client created, request = {@id}", id);
46-
47-
try
48-
{
49-
50-
var response = await client.GetBasketByIdAsync(new BasketRequest { Id = id });
32+
var client = GrpcClient.Create<Basket.BasketClient>(httpClient);
33+
_logger.LogDebug("grpc client created, request = {@id}", id);
34+
var response = await client.GetBasketByIdAsync(new BasketRequest { Id = id });
35+
_logger.LogDebug("grpc response {@response}", response);
5136

52-
_logger.LogDebug("grpc response {@response}", response);
53-
54-
return MapToBasketData(response);
55-
}
56-
catch (RpcException e)
57-
{
58-
_logger.LogError($"Error calling via grpc: {e.Status} - {e.Message}");
59-
}
60-
}
61-
}
62-
63-
return null;
37+
return MapToBasketData(response);
38+
});
6439
}
6540

6641
public async Task UpdateAsync(BasketData currentBasket)
6742
{
68-
_httpClient.BaseAddress = new Uri(_urls.Basket + UrlsConfig.BasketOperations.UpdateBasket());
69-
70-
var client = GrpcClient.Create<Basket.BasketClient>(_httpClient);
71-
var request = MapToCustomerBasketRequest(currentBasket);
43+
await GrpcCallerService.CallService(_urls.GrpcBasket, async httpClient =>
44+
{
45+
var client = GrpcClient.Create<Basket.BasketClient>(httpClient);
46+
_logger.LogDebug("Grpc update basket currentBasket {@currentBasket}", currentBasket);
47+
var request = MapToCustomerBasketRequest(currentBasket);
48+
_logger.LogDebug("Grpc update basket request {@request}", request);
7249

73-
await client.UpdateBasketAsync(request);
50+
return client.UpdateBasketAsync(request);
51+
});
7452
}
7553

7654
private BasketData MapToBasketData(CustomerBasketResponse customerBasketRequest)

src/ApiGateways/Mobile.Bff.Shopping/aggregator/Services/CatalogService.cs

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@
33
using Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Config;
44
using Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Models;
55
using Microsoft.Extensions.Options;
6-
using Newtonsoft.Json;
7-
using System;
86
using System.Collections.Generic;
7+
using System.Linq;
98
using System.Net.Http;
109
using System.Threading.Tasks;
1110
using static CatalogApi.Catalog;
@@ -25,21 +24,26 @@ public CatalogService(HttpClient httpClient, IOptions<UrlsConfig> config)
2524

2625
public async Task<CatalogItem> GetCatalogItemAsync(int id)
2726
{
28-
_httpClient.BaseAddress = new Uri(_urls.Catalog + UrlsConfig.CatalogOperations.GetItemById(id));
2927

30-
var client = GrpcClient.Create<CatalogClient>(_httpClient);
31-
var request = new CatalogItemRequest { Id = id };
32-
var response = await client.GetItemByIdAsync(request);
33-
34-
return MapToCatalogItemResponse(response);
28+
return await GrpcCallerService.CallService(_urls.Catalog + UrlsConfig.CatalogOperations.GetItemById(id), async httpClient =>
29+
{
30+
var client = GrpcClient.Create<CatalogClient>(_httpClient);
31+
var request = new CatalogItemRequest { Id = id };
32+
var response = await client.GetItemByIdAsync(request);
33+
return MapToCatalogItemResponse(response);
34+
});
3535
}
3636

3737
public async Task<IEnumerable<CatalogItem>> GetCatalogItemsAsync(IEnumerable<int> ids)
3838
{
39-
var stringContent = await _httpClient.GetStringAsync(_urls.Catalog + UrlsConfig.CatalogOperations.GetItemsById(ids));
40-
var catalogItems = JsonConvert.DeserializeObject<CatalogItem[]>(stringContent);
4139

42-
return catalogItems;
40+
return await GrpcCallerService.CallService(_urls.GrpcCatalog, async httpClient =>
41+
{
42+
var client = GrpcClient.Create<CatalogClient>(httpClient);
43+
var request = new CatalogItemsRequest { Ids = string.Join(",", ids), PageIndex = 1, PageSize = 10 };
44+
var response = await client.GetItemsByIdsAsync(request);
45+
return response.Data.Select(this.MapToCatalogItemResponse);
46+
});
4347
}
4448

4549
private CatalogItem MapToCatalogItemResponse(CatalogItemResponse catalogItemResponse)
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
using System.Net.Http;
2+
using System.Threading.Tasks;
3+
using System;
4+
using Grpc.Core;
5+
using Serilog;
6+
7+
namespace Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Services
8+
{
9+
public static class GrpcCallerService
10+
{
11+
public static async Task<TResponse> CallService<TResponse>(string urlGrpc, Func<HttpClient, Task<TResponse>> func)
12+
{
13+
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
14+
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2Support", true);
15+
16+
using var httpClientHandler = new HttpClientHandler
17+
{
18+
ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; }
19+
};
20+
21+
using var httpClient = new HttpClient(httpClientHandler)
22+
{
23+
BaseAddress = new Uri(urlGrpc)
24+
};
25+
26+
Log.Information("Creating grpc client base address urlGrpc ={@urlGrpc}, BaseAddress={@BaseAddress} ", urlGrpc, httpClient.BaseAddress);
27+
28+
try
29+
{
30+
return await func(httpClient);
31+
}
32+
catch (RpcException e)
33+
{
34+
Log.Error($"Error calling via grpc: {e.Status} - {e.Message}");
35+
}
36+
37+
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", false);
38+
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2Support", false);
39+
40+
return default;
41+
}
42+
43+
public static async Task CallService(string urlGrpc, Func<HttpClient, Task> func)
44+
{
45+
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
46+
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2Support", true);
47+
48+
using var httpClientHandler = new HttpClientHandler
49+
{
50+
ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; }
51+
};
52+
53+
using var httpClient = new HttpClient(httpClientHandler)
54+
{
55+
BaseAddress = new Uri(urlGrpc)
56+
};
57+
58+
Log.Debug("Creating grpc client base address {@httpClient.BaseAddress} ", httpClient.BaseAddress);
59+
60+
try
61+
{
62+
await func(httpClient);
63+
}
64+
catch (RpcException e)
65+
{
66+
Log.Error($"Error calling via grpc: {e.Status} - {e.Message}");
67+
}
68+
69+
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", false);
70+
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2Support", false);
71+
}
72+
}
73+
}

src/ApiGateways/Mobile.Bff.Shopping/aggregator/Services/OrderingService.cs

Lines changed: 10 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,10 @@
33
using Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Models;
44
using Microsoft.Extensions.Logging;
55
using Microsoft.Extensions.Options;
6-
using System;
76
using System.Linq;
87
using System.Net.Http;
98
using System.Threading.Tasks;
109
using GrpcOrdering;
11-
using Grpc.Core;
1210

1311
namespace Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Services
1412
{
@@ -27,43 +25,21 @@ public OrderingService(HttpClient httpClient, IOptions<UrlsConfig> config, ILogg
2725

2826
public async Task<OrderData> GetOrderDraftAsync(BasketData basketData)
2927
{
30-
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
31-
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2Support", true);
3228

33-
using (var httpClientHandler = new HttpClientHandler())
29+
return await GrpcCallerService.CallService(_urls.GrpcOrdering, async httpClient =>
3430
{
35-
httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; };
36-
using (var httpClient = new HttpClient(httpClientHandler))
37-
{
38-
httpClient.BaseAddress = new Uri(_urls.GrpcOrdering);
31+
var client = GrpcClient.Create<OrderingGrpc.OrderingGrpcClient>(httpClient);
32+
_logger.LogDebug(" grpc client created, basketData={@basketData}", basketData);
3933

40-
_logger.LogDebug(" Creating grpc client for ordering {@httpClient.BaseAddress}", httpClient.BaseAddress);
34+
var command = MapToOrderDraftCommand(basketData);
35+
var response = await client.CreateOrderDraftFromBasketDataAsync(command);
36+
_logger.LogDebug(" grpc response: {@response}", response);
4137

42-
var client = GrpcClient.Create<OrderingGrpc.OrderingGrpcClient>(httpClient);
43-
44-
_logger.LogDebug(" grpc client created, basketData={@basketData}", basketData);
45-
46-
try
47-
{
48-
49-
var command = MapToOrderDraftCommand(basketData);
50-
var response = await client.CreateOrderDraftFromBasketDataAsync(command);
51-
52-
_logger.LogDebug(" grpc response: {@response}", response);
53-
54-
return MapToResponse(response);
55-
}
56-
catch (RpcException e)
57-
{
58-
_logger.LogError($"Error calling via grpc to ordering: {e.Status} - {e.Message}");
59-
}
60-
}
61-
}
62-
63-
return null;
38+
return MapToResponse(response, basketData);
39+
});
6440
}
6541

66-
private OrderData MapToResponse(GrpcOrdering.OrderDraftDTO orderDraft)
42+
private OrderData MapToResponse(GrpcOrdering.OrderDraftDTO orderDraft, BasketData basketData)
6743
{
6844
if (orderDraft == null)
6945
{
@@ -72,6 +48,7 @@ private OrderData MapToResponse(GrpcOrdering.OrderDraftDTO orderDraft)
7248

7349
var data = new OrderData
7450
{
51+
Buyer = basketData.BuyerId,
7552
Total = (decimal)orderDraft.Total,
7653
};
7754

src/ApiGateways/Mobile.Bff.Shopping/aggregator/appsettings.json

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,4 @@
11
{
2-
"Kestrel": {
3-
"EndpointDefaults": {
4-
"Protocols": "Http2"
5-
}
6-
},
72
"Logging": {
83
"IncludeScopes": false,
94
"Debug": {

src/ApiGateways/Mobile.Bff.Shopping/aggregator/appsettings.localhost.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"orders": "http://localhost:55102",
66
"identity": "http://localhost:55105",
77
"grpcBasket": "http://localhost:5580",
8+
"grpcCatalog": "http://localhost:81",
89
"grpcOrdering": "http://localhost:5581"
910
},
1011
"IdentityUrlExternal": "http://localhost:5105",

src/ApiGateways/Web.Bff.Shopping/aggregator/Services/CatalogService.cs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,15 @@ public CatalogService(HttpClient httpClient, ILogger<CatalogService> logger, IOp
2828

2929
public async Task<CatalogItem> GetCatalogItemAsync(int id)
3030
{
31-
_httpClient.BaseAddress = new Uri(_urls.Catalog + UrlsConfig.CatalogOperations.GetItemById(id));
32-
33-
var client = GrpcClient.Create<CatalogClient>(_httpClient);
34-
var request = new CatalogItemRequest { Id = id };
35-
var response = await client.GetItemByIdAsync(request);
36-
37-
return MapToCatalogItemResponse(response);
31+
return await GrpcCallerService.CallService(_urls.GrpcCatalog, async httpClient =>
32+
{
33+
var client = GrpcClient.Create<CatalogClient>(httpClient);
34+
var request = new CatalogItemRequest { Id = id };
35+
_logger.LogInformation("grpc client created, request = {@request}", request);
36+
var response = await client.GetItemByIdAsync(request);
37+
_logger.LogInformation("grpc response {@response}", response);
38+
return MapToCatalogItemResponse(response);
39+
});
3840
}
3941

4042
public async Task<IEnumerable<CatalogItem>> GetCatalogItemsAsync(IEnumerable<int> ids)

0 commit comments

Comments
 (0)