Browse Source

Partial checkin

features/migration-dotnet3
ericuss 5 years ago
parent
commit
016089fb5f
9 changed files with 163 additions and 43 deletions
  1. +34
    -26
      src/ApiGateways/Mobile.Bff.Shopping/aggregator/Services/BasketService.cs
  2. +16
    -12
      src/ApiGateways/Mobile.Bff.Shopping/aggregator/Startup.cs
  3. +6
    -0
      src/ApiGateways/Web.Bff.Shopping/aggregator/Controllers/BasketController.cs
  4. +34
    -0
      src/ApiGateways/Web.Bff.Shopping/aggregator/Protos/basket.api
  5. +59
    -3
      src/ApiGateways/Web.Bff.Shopping/aggregator/Services/BasketService.cs
  6. +4
    -1
      src/ApiGateways/Web.Bff.Shopping/aggregator/Startup.cs
  7. +7
    -0
      src/ApiGateways/Web.Bff.Shopping/aggregator/Web.Shopping.HttpAggregator.csproj
  8. +2
    -1
      src/Services/Identity/Identity.API/Configuration/Config.cs
  9. +1
    -0
      src/_build/dependencies.props

+ 34
- 26
src/ApiGateways/Mobile.Bff.Shopping/aggregator/Services/BasketService.cs View File

@ -1,5 +1,4 @@
using grpc;
using Grpc.Net.Client;
using Grpc.Net.Client;
using Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Config; using Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Config;
using Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Models; using Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Models;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
@ -8,7 +7,8 @@ using System;
using System.Linq; using System.Linq;
using System.Net.Http; using System.Net.Http;
using System.Threading.Tasks; using System.Threading.Tasks;
using static grpc.Basket;
using GrpcBasket;
using Grpc.Core;
namespace Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Services namespace Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Services
{ {
@ -27,49 +27,57 @@ namespace Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Services
public async Task<BasketData> GetById(string id) public async Task<BasketData> GetById(string id)
{ {
_logger.LogInformation("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ GetById @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"); _logger.LogInformation("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ GetById @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2Support", true);
_logger.LogInformation("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Http2UnencryptedSupport disable @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
_httpClient.BaseAddress = new Uri("http://localhost:5001");
_logger.LogInformation("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ {_httpClient.BaseAddress} @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", _httpClient.BaseAddress);
using (var httpClientHandler = new HttpClientHandler())
{
httpClientHandler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; };
using (var httpClient = new HttpClient(httpClientHandler))
{
_logger.LogInformation("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Http2UnencryptedSupport disable @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
var client = GrpcClient.Create<BasketClient>(_httpClient);
httpClient.BaseAddress = new Uri("http://localhost:5580");
_logger.LogInformation("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ client create @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
_logger.LogInformation("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ {httpClient.BaseAddress} @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ " + httpClient.BaseAddress, httpClient.BaseAddress);
var response = await client.GetBasketByIdAsync(new BasketRequest { Id = id });
var client = GrpcClient.Create<Basket.BasketClient>(httpClient);
_logger.LogInformation("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ call grpc server @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
_logger.LogInformation("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ client create @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
_logger.LogInformation("############## DATA: {@a}", response.Buyerid);
try
{
//if (streaming.IsCompleted)
//{
// _logger.LogInformation("############## DATA: {@a}", streaming.GetResult());
//}
//var streaming = client.GetBasketById(new BasketRequest { Id = id });
var response = await client.GetBasketByIdAsync(new BasketRequest { Id = id });
_logger.LogInformation("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ call grpc server @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
_logger.LogInformation("############## DATA: {@a}", response.Buyerid);
_logger.LogInformation("############## DATA:response {@response}", response);
//var status = streaming.GetStatus();
return MapToBasketData(response);
}
catch (RpcException e)
{
_logger.LogError($"Error calling via grpc: {e.Status} - {e.Message}");
}
}
}
//if (status.StatusCode == Grpc.Core.StatusCode.OK)
//{
// return null;
//}
return null; // temp
// var data = await _apiClient.GetStringAsync(_urls.Basket + UrlsConfig.BasketOperations.GetItemById(id));
// var basket = !string.IsNullOrEmpty(data) ? JsonConvert.DeserializeObject<BasketData>(data) : null;
return null;
//return MapToBasketData(response.ResponseStream);
// return basket;
} }
public async Task UpdateAsync(BasketData currentBasket) public async Task UpdateAsync(BasketData currentBasket)
{ {
_httpClient.BaseAddress = new Uri(_urls.Basket + UrlsConfig.BasketOperations.UpdateBasket()); _httpClient.BaseAddress = new Uri(_urls.Basket + UrlsConfig.BasketOperations.UpdateBasket());
var client = GrpcClient.Create<BasketClient>(_httpClient);
var client = GrpcClient.Create<Basket.BasketClient>(_httpClient);
var request = MapToCustomerBasketRequest(currentBasket); var request = MapToCustomerBasketRequest(currentBasket);
await client.UpdateBasketAsync(request); await client.UpdateBasketAsync(request);


+ 16
- 12
src/ApiGateways/Mobile.Bff.Shopping/aggregator/Startup.cs View File

@ -74,6 +74,17 @@ namespace Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator
app.UseCors("CorsPolicy"); app.UseCors("CorsPolicy");
app.UseHttpsRedirection(); app.UseHttpsRedirection();
app.UseSwagger().UseSwaggerUI(c =>
{
c.SwaggerEndpoint($"{ (!string.IsNullOrEmpty(pathBase) ? pathBase : string.Empty) }/swagger/v1/swagger.json", "Purchase BFF V1");
c.OAuthClientId("mobileshoppingaggswaggerui");
c.OAuthClientSecret(string.Empty);
c.OAuthRealm(string.Empty);
c.OAuthAppName("Purchase BFF Swagger UI");
});
app.UseRouting(); app.UseRouting();
app.UseAuthentication(); app.UseAuthentication();
app.UseAuthorization(); app.UseAuthorization();
@ -91,16 +102,6 @@ namespace Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator
Predicate = r => r.Name.Contains("self") Predicate = r => r.Name.Contains("self")
}); });
}); });
app.UseSwagger().UseSwaggerUI(c =>
{
c.SwaggerEndpoint($"{ (!string.IsNullOrEmpty(pathBase) ? pathBase : string.Empty) }/swagger/v1/swagger.json", "Purchase BFF V1");
c.OAuthClientId("mobileshoppingaggswaggerui");
c.OAuthClientSecret(string.Empty);
c.OAuthRealm(string.Empty);
c.OAuthAppName("Purchase BFF Swagger UI");
});
} }
} }
@ -130,8 +131,11 @@ namespace Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator
{ {
Implicit = new OpenApiOAuthFlow() Implicit = new OpenApiOAuthFlow()
{ {
AuthorizationUrl = new Uri($"{configuration.GetValue<string>("IdentityUrlExternal")}/connect/authorize"),
TokenUrl = new Uri($"{configuration.GetValue<string>("IdentityUrlExternal")}/connect/token"),
// AuthorizationUrl = new Uri($"{configuration.GetValue<string>("IdentityUrlExternal")}/connect/authorize"),
// TokenUrl = new Uri($"{configuration.GetValue<string>("IdentityUrlExternal")}/connect/token"),
AuthorizationUrl = new Uri($"http://localhost:5105/connect/authorize"),
TokenUrl = new Uri($"http://localhost:5105/connect/token"),
Scopes = new Dictionary<string, string>() Scopes = new Dictionary<string, string>()
{ {
{ "mobileshoppingagg", "Shopping Aggregator for Mobile Clients" } { "mobileshoppingagg", "Shopping Aggregator for Mobile Clients" }


+ 6
- 0
src/ApiGateways/Web.Bff.Shopping/aggregator/Controllers/BasketController.cs View File

@ -7,6 +7,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Net; using System.Net;
using System.Threading.Tasks; using System.Threading.Tasks;
using Serilog;
namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Controllers namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Controllers
{ {
@ -30,13 +31,18 @@ namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Controllers
[ProducesResponseType(typeof(BasketData), (int)HttpStatusCode.OK)] [ProducesResponseType(typeof(BasketData), (int)HttpStatusCode.OK)]
public async Task<ActionResult<BasketData>> UpdateAllBasketAsync([FromBody] UpdateBasketRequest data) public async Task<ActionResult<BasketData>> UpdateAllBasketAsync([FromBody] UpdateBasketRequest data)
{ {
Log.Information("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ UpdateAllBasketAsync @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
if (data.Items == null || !data.Items.Any()) if (data.Items == null || !data.Items.Any())
{ {
return BadRequest("Need to pass at least one basket line"); return BadRequest("Need to pass at least one basket line");
} }
// Retrieve the current basket // Retrieve the current basket
Log.Information("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ GetByIdAsync @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
var basket = await _basket.GetByIdAsync(data.BuyerId) ?? new BasketData(data.BuyerId); var basket = await _basket.GetByIdAsync(data.BuyerId) ?? new BasketData(data.BuyerId);
Log.Information("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ basket @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
var catalogItems = await _catalog.GetCatalogItemsAsync(data.Items.Select(x => x.ProductId)); var catalogItems = await _catalog.GetCatalogItemsAsync(data.Items.Select(x => x.ProductId));


+ 34
- 0
src/ApiGateways/Web.Bff.Shopping/aggregator/Protos/basket.api View File

@ -0,0 +1,34 @@
syntax = "proto3";
option csharp_namespace = "GrpcBasket";
package BasketApi;
service Basket {
rpc GetBasketById(BasketRequest) returns (CustomerBasketResponse);
rpc UpdateBasket(CustomerBasketRequest) returns (CustomerBasketResponse);
}
message BasketRequest {
string id = 1;
}
message CustomerBasketRequest {
string buyerid = 1;
repeated BasketItemResponse items = 2;
}
message CustomerBasketResponse {
string buyerid = 1;
repeated BasketItemResponse items = 2;
}
message BasketItemResponse {
string id = 1;
string productid = 2;
string productname = 3;
double unitprice = 4;
double oldunitprice = 5;
int32 quantity = 6;
string pictureurl = 7;
}

+ 59
- 3
src/ApiGateways/Web.Bff.Shopping/aggregator/Services/BasketService.cs View File

@ -23,10 +23,66 @@ namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Services
public async Task<BasketData> GetByIdAsync(string id) public async Task<BasketData> GetByIdAsync(string id)
{ {
var data = await _apiClient.GetStringAsync(_urls.Basket + UrlsConfig.BasketOperations.GetItemById(id));
var basket = !string.IsNullOrEmpty(data) ? JsonConvert.DeserializeObject<BasketData>(data) : null;
return basket;
_logger.LogInformation("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ GetById @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
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))
{
_logger.LogInformation("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Http2UnencryptedSupport disable @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
httpClient.BaseAddress = new Uri("http://localhost:5580");
_logger.LogInformation("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ {httpClient.BaseAddress} @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", httpClient.BaseAddress);
var client = GrpcClient.Create<BasketClient>(httpClient);
_logger.LogInformation("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ client create @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
try{
var response = await client.GetBasketByIdAsync(new BasketRequest { Id = id });
_logger.LogInformation("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ call grpc server @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
_logger.LogInformation("############## DATA: {@a}", response.Buyerid);
_logger.LogInformation("############## DATA:response {@response}", response);
}
catch (RpcException e)
{
Console.WriteLine($"Error calling via grpc: {e.Status} - {e.Message}");
_logger.logError($"Error calling via grpc: {e.Status} - {e.Message}");
}
//if (streaming.IsCompleted)
//{
// _logger.LogInformation("############## DATA: {@a}", streaming.GetResult());
//}
//var streaming = client.GetBasketById(new BasketRequest { Id = id });
//var status = streaming.GetStatus();
//if (status.StatusCode == Grpc.Core.StatusCode.OK)
//{
// return null;
//}
return response;
}
}
// var data = await _apiClient.GetStringAsync(_urls.Basket + UrlsConfig.BasketOperations.GetItemById(id));
// var basket = !string.IsNullOrEmpty(data) ? JsonConvert.DeserializeObject<BasketData>(data) : null;
// return basket;
} }
public async Task UpdateAsync(BasketData currentBasket) public async Task UpdateAsync(BasketData currentBasket)


+ 4
- 1
src/ApiGateways/Web.Bff.Shopping/aggregator/Startup.cs View File

@ -94,6 +94,8 @@ namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator
{ {
c.SwaggerEndpoint($"{ (!string.IsNullOrEmpty(pathBase) ? pathBase : string.Empty) }/swagger/v1/swagger.json", "Purchase BFF V1"); c.SwaggerEndpoint($"{ (!string.IsNullOrEmpty(pathBase) ? pathBase : string.Empty) }/swagger/v1/swagger.json", "Purchase BFF V1");
//c.ConfigureOAuth2("Microsoft.eShopOnContainers.Web.Shopping.HttpAggregatorwaggerui", "", "", "Purchase BFF Swagger UI"); //c.ConfigureOAuth2("Microsoft.eShopOnContainers.Web.Shopping.HttpAggregatorwaggerui", "", "", "Purchase BFF Swagger UI");
c.OAuthClientId("webshoppingaggswaggerui");
c.OAuthAppName("web shopping bff Swagger UI");
}); });
} }
} }
@ -157,7 +159,8 @@ namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator
TokenUrl = $"{configuration.GetValue<string>("IdentityUrlExternal")}/connect/token", TokenUrl = $"{configuration.GetValue<string>("IdentityUrlExternal")}/connect/token",
Scopes = new Dictionary<string, string>() Scopes = new Dictionary<string, string>()
{ {
{ "webshoppingagg", "Shopping Aggregator for Web Clients" }
{ "webshoppingagg", "Shopping Aggregator for Web Clients" },
{ "basket", "basket api" }
} }
}); });


+ 7
- 0
src/ApiGateways/Web.Bff.Shopping/aggregator/Web.Shopping.HttpAggregator.csproj View File

@ -55,6 +55,13 @@
<PackageReference Include="Microsoft.Extensions.Http.Polly" Version="2.2.0" /> <PackageReference Include="Microsoft.Extensions.Http.Polly" Version="2.2.0" />
</ItemGroup> </ItemGroup>
<!-- grpc -->
<ItemGroup>
<PackageReference Include="Google.Protobuf" Version="$(Google_Protobuf)" />
<PackageReference Include="Grpc.Net.Client" Version="$(Grpc_Net_Client)" />
<PackageReference Include="Grpc.Tools" Version="$(Grpc_Tools)" PrivateAssets="All" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\..\BuildingBlocks\Devspaces.Support\Devspaces.Support.csproj" /> <ProjectReference Include="..\..\..\BuildingBlocks\Devspaces.Support\Devspaces.Support.csproj" />
</ItemGroup> </ItemGroup>


+ 2
- 1
src/Services/Identity/Identity.API/Configuration/Config.cs View File

@ -284,7 +284,8 @@ namespace Microsoft.eShopOnContainers.Services.Identity.API.Configuration
AllowedScopes = AllowedScopes =
{ {
"webshoppingagg"
"webshoppingagg",
"basket"
} }
}, },
new Client new Client


+ 1
- 0
src/_build/dependencies.props View File

@ -17,6 +17,7 @@
<PropertyGroup Label="Package Versions"> <PropertyGroup Label="Package Versions">
<Grpc_AspNetCore_Server>0.1.22-pre3</Grpc_AspNetCore_Server> <Grpc_AspNetCore_Server>0.1.22-pre3</Grpc_AspNetCore_Server>
<Grpc_Net_Client>0.1.22-pre3</Grpc_Net_Client>
<Google_Protobuf>3.9.1</Google_Protobuf> <Google_Protobuf>3.9.1</Google_Protobuf>
<Grpc_Tools>2.23.0</Grpc_Tools> <Grpc_Tools>2.23.0</Grpc_Tools>
<Grpc_AspNetCore_Server_ClientFactory>0.1.22-pre2</Grpc_AspNetCore_Server_ClientFactory> <Grpc_AspNetCore_Server_ClientFactory>0.1.22-pre2</Grpc_AspNetCore_Server_ClientFactory>


Loading…
Cancel
Save