Browse Source

partial checkin

features/migration-dotnet3
ericuss 5 years ago
parent
commit
3fee58e666
4 changed files with 108 additions and 40 deletions
  1. +40
    -4
      src/ApiGateways/Web.Bff.Shopping/aggregator/Services/BasketService.cs
  2. +29
    -8
      src/ApiGateways/Web.Bff.Shopping/aggregator/Services/CatalogService.cs
  3. +38
    -21
      src/Services/Catalog/Catalog.API/Grpc/CatalogService.cs
  4. +1
    -7
      src/Services/Catalog/Catalog.API/Proto/catalog.proto

+ 40
- 4
src/ApiGateways/Web.Bff.Shopping/aggregator/Services/BasketService.cs View File

@ -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<Basket.BasketClient>(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<Basket.BasketClient>(_httpClient);
var request = MapToCustomerBasketRequest(currentBasket);
//var client = GrpcClient.Create<Basket.BasketClient>(_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)


+ 29
- 8
src/ApiGateways/Web.Bff.Shopping/aggregator/Services/CatalogService.cs View File

@ -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<IEnumerable<CatalogItem>> GetCatalogItemsAsync(IEnumerable<int> ids)
{
_httpClient.BaseAddress = new Uri(_urls.Catalog + UrlsConfig.CatalogOperations.GetItemsById(ids));
var client = GrpcClient.Create<CatalogClient>(_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<CatalogItem[]>(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<CatalogClient>(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)


+ 38
- 21
src/Services/Catalog/Catalog.API/Grpc/CatalogService.cs View File

@ -64,10 +64,12 @@ namespace Catalog.API.Grpc
public override async Task<PaginatedItemsResponse> 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;
}


+ 1
- 7
src/Services/Catalog/Catalog.API/Proto/catalog.proto View File

@ -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) {}
}

Loading…
Cancel
Save