diff --git a/src/ApiGateways/Web.Bff.Shopping/aggregator/Services/BasketService.cs b/src/ApiGateways/Web.Bff.Shopping/aggregator/Services/BasketService.cs index 3e68816c1..2bfc30ce9 100644 --- a/src/ApiGateways/Web.Bff.Shopping/aggregator/Services/BasketService.cs +++ b/src/ApiGateways/Web.Bff.Shopping/aggregator/Services/BasketService.cs @@ -66,12 +66,48 @@ namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Services public async Task UpdateAsync(BasketData currentBasket) { - _httpClient.BaseAddress = new Uri(_urls.Basket + UrlsConfig.BasketOperations.UpdateBasket()); + AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); + AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2Support", true); + + using (var httpClientHandler = new HttpClientHandler()) + { + httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; }; + using (var httpClient = new HttpClient(httpClientHandler)) + { + httpClient.BaseAddress = new Uri(_urls.GrpcBasket); + + _logger.LogDebug("Creating grpc client for basket {@httpClient.BaseAddress} ", httpClient.BaseAddress); + + var client = GrpcClient.Create(httpClient); + + + try + { + + _logger.LogInformation("Grpc update basket currentBasket {@currentBasket}", currentBasket); + var request = MapToCustomerBasketRequest(currentBasket); + _logger.LogInformation("Grpc update basket request {@request}", request); + + await client.UpdateBasketAsync(request); + } + catch (RpcException e) + { + _logger.LogError($"Error calling via grpc: {e.Status} - {e.Message}"); + } + } + } + + + + + //_httpClient.BaseAddress = new Uri(_urls.Basket + UrlsConfig.BasketOperations.UpdateBasket()); - var client = GrpcClient.Create(_httpClient); - var request = MapToCustomerBasketRequest(currentBasket); + //var client = GrpcClient.Create(_httpClient); + //_logger.LogInformation("Grpc update basket currentBasket {@currentBasket}", currentBasket); + //var request = MapToCustomerBasketRequest(currentBasket); + //_logger.LogInformation("Grpc update basket request {@request}", request); - await client.UpdateBasketAsync(request); + //await client.UpdateBasketAsync(request); } private BasketData MapToBasketData(CustomerBasketResponse customerBasketRequest) diff --git a/src/ApiGateways/Web.Bff.Shopping/aggregator/Services/CatalogService.cs b/src/ApiGateways/Web.Bff.Shopping/aggregator/Services/CatalogService.cs index 663baa1cf..9a1c393b0 100644 --- a/src/ApiGateways/Web.Bff.Shopping/aggregator/Services/CatalogService.cs +++ b/src/ApiGateways/Web.Bff.Shopping/aggregator/Services/CatalogService.cs @@ -11,6 +11,7 @@ using Grpc.Net.Client; using System; using static CatalogApi.Catalog; using System.Linq; +using Grpc.Core; namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Services { @@ -40,16 +41,36 @@ namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Services public async Task> GetCatalogItemsAsync(IEnumerable ids) { - _httpClient.BaseAddress = new Uri(_urls.Catalog + UrlsConfig.CatalogOperations.GetItemsById(ids)); - var client = GrpcClient.Create(_httpClient); - var request = new CatalogItemsRequest { Ids = string.Join(",", ids), PageIndex = 1, PageSize = 10 }; - var response = await client.GetItemsByIdsAsync(request); - return response.Data.Select(this.MapToCatalogItemResponse); - //var stringContent = await _httpClient.GetStringAsync(_urls.Catalog + UrlsConfig.CatalogOperations.GetItemsById(ids)); - //var catalogItems = JsonConvert.DeserializeObject(stringContent); + AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); + AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2Support", true); + + using (var httpClientHandler = new HttpClientHandler()) + { + httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; }; + using (var httpClient = new HttpClient(httpClientHandler)) + { + httpClient.BaseAddress = new Uri(_urls.GrpcCatalog); + + _logger.LogInformation("Creating grpc client for CatalogClient {@httpClient.BaseAddress}, {@httpClient} ", httpClient.BaseAddress, httpClient); + + try + { + var client = GrpcClient.Create(httpClient); + var request = new CatalogItemsRequest { Ids = string.Join(",", ids), PageIndex = 1, PageSize = 10 }; + _logger.LogInformation("grpc client created, request = {@request}", request); + var response = await client.GetItemsByIdsAsync(request); + _logger.LogInformation("grpc response {@response}", response); + return response.Data.Select(this.MapToCatalogItemResponse); + } + catch (RpcException e) + { + _logger.LogError($"Error calling via grpc: {e.Status} - {e.Message}"); + } + } + } - //return catalogItems; + return null; } private CatalogItem MapToCatalogItemResponse(CatalogItemResponse catalogItemResponse) diff --git a/src/Services/Catalog/Catalog.API/Grpc/CatalogService.cs b/src/Services/Catalog/Catalog.API/Grpc/CatalogService.cs index b25d3b103..9c620a481 100644 --- a/src/Services/Catalog/Catalog.API/Grpc/CatalogService.cs +++ b/src/Services/Catalog/Catalog.API/Grpc/CatalogService.cs @@ -64,10 +64,12 @@ namespace Catalog.API.Grpc public override async Task GetItemsByIds(CatalogItemsRequest request, ServerCallContext context) { + _logger.LogInformation("---------- GetItemsByIds request {@request}", request); if (!string.IsNullOrEmpty(request.Ids)) { var items = await GetItemsByIdsAsync(request.Ids); + _logger.LogInformation("---------- GetItemsByIds items {@items}", items); if (!items.Any()) { context.Status = new Status(StatusCode.NotFound, $"ids value invalid. Must be comma-separated list of numbers"); @@ -76,15 +78,18 @@ namespace Catalog.API.Grpc return this.MapToResponse(items); } + _logger.LogInformation("---------- GetItemsByIds else"); var totalItems = await _catalogContext.CatalogItems .LongCountAsync(); + _logger.LogInformation("---------- GetItemsByIds totalItems {@totalItems}", totalItems); var itemsOnPage = await _catalogContext.CatalogItems .OrderBy(c => c.Name) .Skip(request.PageSize * request.PageIndex) .Take(request.PageSize) .ToListAsync(); + _logger.LogInformation("---------- GetItemsByIds itemsOnPage {@itemsOnPage}", itemsOnPage); /* The "awesome" fix for testing Devspaces */ /* @@ -95,8 +100,10 @@ namespace Catalog.API.Grpc */ itemsOnPage = ChangeUriPlaceholder(itemsOnPage); + _logger.LogInformation("---------- GetItemsByIds itemsOnPage2 {@itemsOnPage}", itemsOnPage); var model = this.MapToResponse(itemsOnPage, totalItems, request.PageIndex, request.PageSize); + _logger.LogInformation("---------- GetItemsByIds model {@model}", model); context.Status = new Status(StatusCode.OK, string.Empty); return model; @@ -116,29 +123,39 @@ namespace Catalog.API.Grpc PageSize = pageSize, }; - items.ForEach(i => result.Data.Add(new CatalogItemResponse() + items.ForEach(i => { - AvailableStock = i.AvailableStock, - Description = i.Description, - Id = i.Id, - MaxStockThreshold = i.MaxStockThreshold, - Name = i.Name, - OnReorder = i.OnReorder, - PictureFileName = i.PictureFileName, - PictureUri = i.PictureUri, - RestockThreshold = i.RestockThreshold, - CatalogBrand = new CatalogApi.CatalogBrand() + var brand = i.CatalogBrand == null + ? null + : new CatalogApi.CatalogBrand() + { + Id = i.CatalogBrand.Id, + Name = i.CatalogBrand.Brand, + }; + var catalogType = i.CatalogType == null + ? null + : new CatalogApi.CatalogType() + { + Id = i.CatalogType.Id, + Type = i.CatalogType.Type, + }; + + result.Data.Add(new CatalogItemResponse() { - Id = i.CatalogBrand.Id, - Name = i.CatalogBrand.Brand, - }, - CatalogType = new CatalogApi.CatalogType() - { - Id = i.CatalogType.Id, - Type = i.CatalogType.Type, - }, - Price = (double)i.Price, - })); + AvailableStock = i.AvailableStock, + Description = i.Description, + Id = i.Id, + MaxStockThreshold = i.MaxStockThreshold, + Name = i.Name, + OnReorder = i.OnReorder, + PictureFileName = i.PictureFileName, + PictureUri = i.PictureUri, + RestockThreshold = i.RestockThreshold, + CatalogBrand = brand, + CatalogType = catalogType, + Price = (double)i.Price, + }); + }); return result; } diff --git a/src/Services/Catalog/Catalog.API/Proto/catalog.proto b/src/Services/Catalog/Catalog.API/Proto/catalog.proto index adeeb4b26..fa83d45c4 100644 --- a/src/Services/Catalog/Catalog.API/Proto/catalog.proto +++ b/src/Services/Catalog/Catalog.API/Proto/catalog.proto @@ -56,11 +56,5 @@ service Catalog { }; << */ } - rpc GetItemsByIds (CatalogItemsRequest) returns (PaginatedItemsResponse) { - /* >> - option (google.api.http) = { - get: "/api/v1/catalog/items/ids/{ids}" - }; - << */ - } + rpc GetItemsByIds (CatalogItemsRequest) returns (PaginatedItemsResponse) {} } \ No newline at end of file