diff --git a/src/ApiGateways/Mobile.Bff.Shopping/aggregator/Services/OrderingService.cs b/src/ApiGateways/Mobile.Bff.Shopping/aggregator/Services/OrderingService.cs index d34a5338a..0e04c9c22 100644 --- a/src/ApiGateways/Mobile.Bff.Shopping/aggregator/Services/OrderingService.cs +++ b/src/ApiGateways/Mobile.Bff.Shopping/aggregator/Services/OrderingService.cs @@ -11,31 +11,24 @@ namespace Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator.Services { public class OrderingService : IOrderingService { - private readonly HttpClient _httpClient; - private readonly UrlsConfig _urls; + private readonly OrderingGrpc.OrderingGrpcClient _orderingGrpcClient; private readonly ILogger _logger; - public OrderingService(HttpClient httpClient, IOptions config, ILogger logger) + public OrderingService(OrderingGrpc.OrderingGrpcClient orderingGrpcClient, ILogger logger) { - _httpClient = httpClient; - _urls = config.Value; + _orderingGrpcClient = orderingGrpcClient; _logger = logger; } public async Task GetOrderDraftAsync(BasketData basketData) { + _logger.LogDebug(" grpc client created, basketData={@basketData}", basketData); - return await GrpcCallerService.CallService(_urls.GrpcOrdering, async channel => - { - var client = new OrderingGrpc.OrderingGrpcClient(channel); - _logger.LogDebug(" grpc client created, basketData={@basketData}", basketData); - - var command = MapToOrderDraftCommand(basketData); - var response = await client.CreateOrderDraftFromBasketDataAsync(command); - _logger.LogDebug(" grpc response: {@response}", response); + var command = MapToOrderDraftCommand(basketData); + var response = await _orderingGrpcClient.CreateOrderDraftFromBasketDataAsync(command); + _logger.LogDebug(" grpc response: {@response}", response); - return MapToResponse(response, basketData); - }); + return MapToResponse(response, basketData); } private OrderData MapToResponse(GrpcOrdering.OrderDraftDTO orderDraft, BasketData basketData) diff --git a/src/ApiGateways/Mobile.Bff.Shopping/aggregator/Startup.cs b/src/ApiGateways/Mobile.Bff.Shopping/aggregator/Startup.cs index 8a4f2c283..4f6e18d7c 100644 --- a/src/ApiGateways/Mobile.Bff.Shopping/aggregator/Startup.cs +++ b/src/ApiGateways/Mobile.Bff.Shopping/aggregator/Startup.cs @@ -1,6 +1,7 @@ using CatalogApi; using Devspaces.Support; using GrpcBasket; +using GrpcOrdering; using HealthChecks.UI.Client; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Builder; @@ -185,9 +186,6 @@ namespace Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator services.AddHttpClient() .AddDevspacesSupport(); - services.AddHttpClient() - .AddDevspacesSupport(); - return services; } @@ -211,6 +209,14 @@ namespace Microsoft.eShopOnContainers.Mobile.Shopping.HttpAggregator options.Address = new Uri(catalogApi); }).AddInterceptor(); + services.AddScoped(); + + services.AddGrpcClient((services, options) => + { + var orderingApi = services.GetRequiredService>().Value.GrpcOrdering; + options.Address = new Uri(orderingApi); + }).AddInterceptor(); + return services; } diff --git a/src/ApiGateways/Web.Bff.Shopping/aggregator/Services/OrderingService.cs b/src/ApiGateways/Web.Bff.Shopping/aggregator/Services/OrderingService.cs index b460f4864..5ab8045c2 100644 --- a/src/ApiGateways/Web.Bff.Shopping/aggregator/Services/OrderingService.cs +++ b/src/ApiGateways/Web.Bff.Shopping/aggregator/Services/OrderingService.cs @@ -1,6 +1,6 @@ using GrpcOrdering; -using Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Config; using Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Models; +using Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Services; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using System.Linq; @@ -11,30 +11,24 @@ namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator.Services { public class OrderingService : IOrderingService { - private readonly UrlsConfig _urls; + private readonly OrderingGrpc.OrderingGrpcClient _orderingGrpcClient; private readonly ILogger _logger; - public readonly HttpClient _httpClient; - public OrderingService(HttpClient httpClient, IOptions config, ILogger logger) + public OrderingService(OrderingGrpc.OrderingGrpcClient orderingGrpcClient, ILogger logger) { - _urls = config.Value; - _httpClient = httpClient; + _orderingGrpcClient = orderingGrpcClient; _logger = logger; } public async Task GetOrderDraftAsync(BasketData basketData) { - return await GrpcCallerService.CallService(_urls.GrpcOrdering, async channel => - { - var client = new OrderingGrpc.OrderingGrpcClient(channel); - _logger.LogDebug(" grpc client created, basketData={@basketData}", basketData); + _logger.LogDebug(" grpc client created, basketData={@basketData}", basketData); - var command = MapToOrderDraftCommand(basketData); - var response = await client.CreateOrderDraftFromBasketDataAsync(command); - _logger.LogDebug(" grpc response: {@response}", response); + var command = MapToOrderDraftCommand(basketData); + var response = await _orderingGrpcClient.CreateOrderDraftFromBasketDataAsync(command); + _logger.LogDebug(" grpc response: {@response}", response); - return MapToResponse(response, basketData); - }); + return MapToResponse(response, basketData); } private OrderData MapToResponse(GrpcOrdering.OrderDraftDTO orderDraft, BasketData basketData) diff --git a/src/ApiGateways/Web.Bff.Shopping/aggregator/Startup.cs b/src/ApiGateways/Web.Bff.Shopping/aggregator/Startup.cs index a927f9260..5c586b324 100644 --- a/src/ApiGateways/Web.Bff.Shopping/aggregator/Startup.cs +++ b/src/ApiGateways/Web.Bff.Shopping/aggregator/Startup.cs @@ -1,6 +1,7 @@ using CatalogApi; using Devspaces.Support; using GrpcBasket; +using GrpcOrdering; using HealthChecks.UI.Client; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Builder; @@ -189,10 +190,6 @@ namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator .AddHttpMessageHandler() .AddDevspacesSupport(); - services.AddHttpClient() - .AddHttpMessageHandler() - .AddDevspacesSupport(); - return services; } @@ -216,6 +213,14 @@ namespace Microsoft.eShopOnContainers.Web.Shopping.HttpAggregator options.Address = new Uri(catalogApi); }).AddInterceptor(); + services.AddScoped(); + + services.AddGrpcClient((services, options) => + { + var orderingApi = services.GetRequiredService>().Value.GrpcOrdering; + options.Address = new Uri(orderingApi); + }).AddInterceptor(); + return services; } } diff --git a/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderCommand.cs b/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderCommand.cs index d54b5add5..21e1037b1 100644 --- a/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderCommand.cs +++ b/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderCommand.cs @@ -89,19 +89,19 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.API.Application.Commands } - public class OrderItemDTO + public record OrderItemDTO { - public int ProductId { get; set; } + public int ProductId { get; init; } - public string ProductName { get; set; } + public string ProductName { get; init; } - public decimal UnitPrice { get; set; } + public decimal UnitPrice { get; init; } - public decimal Discount { get; set; } + public decimal Discount { get; init; } - public int Units { get; set; } + public int Units { get; init; } - public string PictureUrl { get; set; } + public string PictureUrl { get; init; } } } } diff --git a/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderDraftCommandHandler.cs b/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderDraftCommandHandler.cs index 2c315248b..e51b39f02 100644 --- a/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderDraftCommandHandler.cs +++ b/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderDraftCommandHandler.cs @@ -4,7 +4,6 @@ using global::Ordering.API.Application.Models; using MediatR; using Microsoft.eShopOnContainers.Services.Ordering.API.Infrastructure.Services; - using Microsoft.eShopOnContainers.Services.Ordering.Infrastructure.Idempotency; using System; using System.Collections.Generic; using System.Linq; @@ -42,10 +41,10 @@ } - public class OrderDraftDTO + public record OrderDraftDTO { - public IEnumerable OrderItems { get; set; } - public decimal Total { get; set; } + public IEnumerable OrderItems { get; init; } + public decimal Total { get; init; } public static OrderDraftDTO FromOrder(Order order) { diff --git a/src/Services/Ordering/Ordering.API/Application/Models/BasketItem.cs b/src/Services/Ordering/Ordering.API/Application/Models/BasketItem.cs index 271524c69..16830919d 100644 --- a/src/Services/Ordering/Ordering.API/Application/Models/BasketItem.cs +++ b/src/Services/Ordering/Ordering.API/Application/Models/BasketItem.cs @@ -7,12 +7,12 @@ namespace Ordering.API.Application.Models { public class BasketItem { - public string Id { get; set; } - public int ProductId { get; set; } - public string ProductName { get; set; } - public decimal UnitPrice { get; set; } - public decimal OldUnitPrice { get; set; } - public int Quantity { get; set; } - public string PictureUrl { get; set; } + public string Id { get; init; } + public int ProductId { get; init; } + public string ProductName { get; init; } + public decimal UnitPrice { get; init; } + public decimal OldUnitPrice { get; init; } + public int Quantity { get; init; } + public string PictureUrl { get; init; } } } diff --git a/src/Services/Ordering/Ordering.API/Application/Queries/OrderViewModel.cs b/src/Services/Ordering/Ordering.API/Application/Queries/OrderViewModel.cs index a4f5eb0a9..84f9f3f40 100644 --- a/src/Services/Ordering/Ordering.API/Application/Queries/OrderViewModel.cs +++ b/src/Services/Ordering/Ordering.API/Application/Queries/OrderViewModel.cs @@ -3,39 +3,39 @@ using System.Collections.Generic; namespace Microsoft.eShopOnContainers.Services.Ordering.API.Application.Queries { - public class Orderitem + public record Orderitem { - public string productname { get; set; } - public int units { get; set; } - public double unitprice { get; set; } - public string pictureurl { get; set; } + public string productname { get; init; } + public int units { get; init; } + public double unitprice { get; init; } + public string pictureurl { get; init; } } - public class Order + public record Order { - public int ordernumber { get; set; } - public DateTime date { get; set; } - public string status { get; set; } - public string description { get; set; } - public string street { get; set; } - public string city { get; set; } - public string zipcode { get; set; } - public string country { get; set; } + public int ordernumber { get; init; } + public DateTime date { get; init; } + public string status { get; init; } + public string description { get; init; } + public string street { get; init; } + public string city { get; init; } + public string zipcode { get; init; } + public string country { get; init; } public List orderitems { get; set; } public decimal total { get; set; } } - public class OrderSummary + public record OrderSummary { - public int ordernumber { get; set; } - public DateTime date { get; set; } - public string status { get; set; } - public double total { get; set; } + public int ordernumber { get; init; } + public DateTime date { get; init; } + public string status { get; init; } + public double total { get; init; } } - public class CardType + public record CardType { - public int Id { get; set; } - public string Name { get; set; } + public int Id { get; init; } + public string Name { get; init; } } } diff --git a/src/Services/Ordering/Ordering.API/Dockerfile b/src/Services/Ordering/Ordering.API/Dockerfile index 0c841c4ba..012fb97dc 100644 --- a/src/Services/Ordering/Ordering.API/Dockerfile +++ b/src/Services/Ordering/Ordering.API/Dockerfile @@ -1,8 +1,8 @@ -FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base +FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base WORKDIR /app EXPOSE 80 -FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build +FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build WORKDIR /src # It's important to keep lines from here down to "COPY . ." identical in all Dockerfiles diff --git a/src/Services/Ordering/Ordering.API/Ordering.API.csproj b/src/Services/Ordering/Ordering.API/Ordering.API.csproj index c212bfe05..227141a5b 100644 --- a/src/Services/Ordering/Ordering.API/Ordering.API.csproj +++ b/src/Services/Ordering/Ordering.API/Ordering.API.csproj @@ -1,7 +1,7 @@  - netcoreapp3.1 + net5.0 aspnet-Ordering.API-20161122013547 $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; ..\..\..\..\docker-compose.dcproj @@ -37,36 +37,36 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - + + + + + + - + - + diff --git a/src/Services/Ordering/Ordering.API/Program.cs b/src/Services/Ordering/Ordering.API/Program.cs index 0bac28006..0a42cbba1 100644 --- a/src/Services/Ordering/Ordering.API/Program.cs +++ b/src/Services/Ordering/Ordering.API/Program.cs @@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Server.Kestrel.Core; using Microsoft.eShopOnContainers.BuildingBlocks.IntegrationEventLogEF; +using Microsoft.eShopOnContainers.Services.Ordering.API; using Microsoft.eShopOnContainers.Services.Ordering.API.Infrastructure; using Microsoft.eShopOnContainers.Services.Ordering.Infrastructure; using Microsoft.Extensions.Configuration; @@ -13,115 +14,111 @@ using System; using System.IO; using System.Net; -namespace Microsoft.eShopOnContainers.Services.Ordering.API +var configuration = GetConfiguration(); + +Log.Logger = CreateSerilogLogger(configuration); + +try { - public class Program + Log.Information("Configuring web host ({ApplicationContext})...", Program.AppName); + var host = BuildWebHost(configuration, args); + + Log.Information("Applying migrations ({ApplicationContext})...", Program.AppName); + host.MigrateDbContext((context, services) => { - public static readonly string Namespace = typeof(Program).Namespace; - public static readonly string AppName = Namespace.Substring(Namespace.LastIndexOf('.', Namespace.LastIndexOf('.') - 1) + 1); + var env = services.GetService(); + var settings = services.GetService>(); + var logger = services.GetService>(); + + new OrderingContextSeed() + .SeedAsync(context, env, settings, logger) + .Wait(); + }) + .MigrateDbContext((_, __) => { }); + + Log.Information("Starting web host ({ApplicationContext})...", Program.AppName); + host.Run(); + + return 0; +} +catch (Exception ex) +{ + Log.Fatal(ex, "Program terminated unexpectedly ({ApplicationContext})!", Program.AppName); + return 1; +} +finally +{ + Log.CloseAndFlush(); +} - public static int Main(string[] args) +IWebHost BuildWebHost(IConfiguration configuration, string[] args) => + WebHost.CreateDefaultBuilder(args) + .CaptureStartupErrors(false) + .ConfigureKestrel(options => { - var configuration = GetConfiguration(); - - Log.Logger = CreateSerilogLogger(configuration); - - try - { - Log.Information("Configuring web host ({ApplicationContext})...", AppName); - var host = BuildWebHost(configuration, args); - - Log.Information("Applying migrations ({ApplicationContext})...", AppName); - host.MigrateDbContext((context, services) => - { - var env = services.GetService(); - var settings = services.GetService>(); - var logger = services.GetService>(); - - new OrderingContextSeed() - .SeedAsync(context, env, settings, logger) - .Wait(); - }) - .MigrateDbContext((_, __) => { }); - - Log.Information("Starting web host ({ApplicationContext})...", AppName); - host.Run(); - - return 0; - } - catch (Exception ex) + var ports = GetDefinedPorts(configuration); + options.Listen(IPAddress.Any, ports.httpPort, listenOptions => { - Log.Fatal(ex, "Program terminated unexpectedly ({ApplicationContext})!", AppName); - return 1; - } - finally + listenOptions.Protocols = HttpProtocols.Http1AndHttp2; + }); + + options.Listen(IPAddress.Any, ports.grpcPort, listenOptions => { - Log.CloseAndFlush(); - } - } - - private static IWebHost BuildWebHost(IConfiguration configuration, string[] args) => - WebHost.CreateDefaultBuilder(args) - .CaptureStartupErrors(false) - .ConfigureKestrel(options => - { - var ports = GetDefinedPorts(configuration); - options.Listen(IPAddress.Any, ports.httpPort, listenOptions => - { - listenOptions.Protocols = HttpProtocols.Http1AndHttp2; - }); - - options.Listen(IPAddress.Any, ports.grpcPort, listenOptions => - { - listenOptions.Protocols = HttpProtocols.Http2; - }); - - }) - .ConfigureAppConfiguration(x => x.AddConfiguration(configuration)) - .UseStartup() - .UseContentRoot(Directory.GetCurrentDirectory()) - .UseSerilog() - .Build(); - - private static Serilog.ILogger CreateSerilogLogger(IConfiguration configuration) - { - var seqServerUrl = configuration["Serilog:SeqServerUrl"]; - var logstashUrl = configuration["Serilog:LogstashgUrl"]; - return new LoggerConfiguration() - .MinimumLevel.Verbose() - .Enrich.WithProperty("ApplicationContext", AppName) - .Enrich.FromLogContext() - .WriteTo.Console() - .WriteTo.Seq(string.IsNullOrWhiteSpace(seqServerUrl) ? "http://seq" : seqServerUrl) - .WriteTo.Http(string.IsNullOrWhiteSpace(logstashUrl) ? "http://logstash:8080" : logstashUrl) - .ReadFrom.Configuration(configuration) - .CreateLogger(); - } - - private static IConfiguration GetConfiguration() - { - var builder = new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) - .AddEnvironmentVariables(); + listenOptions.Protocols = HttpProtocols.Http2; + }); - var config = builder.Build(); + }) + .ConfigureAppConfiguration(x => x.AddConfiguration(configuration)) + .UseStartup() + .UseContentRoot(Directory.GetCurrentDirectory()) + .UseSerilog() + .Build(); - if (config.GetValue("UseVault", false)) - { - builder.AddAzureKeyVault( - $"https://{config["Vault:Name"]}.vault.azure.net/", - config["Vault:ClientId"], - config["Vault:ClientSecret"]); - } - - return builder.Build(); - } - private static (int httpPort, int grpcPort) GetDefinedPorts(IConfiguration config) - { - var grpcPort = config.GetValue("GRPC_PORT", 5001); - var port = config.GetValue("PORT", 80); - return (port, grpcPort); - } +Serilog.ILogger CreateSerilogLogger(IConfiguration configuration) +{ + var seqServerUrl = configuration["Serilog:SeqServerUrl"]; + var logstashUrl = configuration["Serilog:LogstashgUrl"]; + return new LoggerConfiguration() + .MinimumLevel.Verbose() + .Enrich.WithProperty("ApplicationContext", Program.AppName) + .Enrich.FromLogContext() + .WriteTo.Console() + .WriteTo.Seq(string.IsNullOrWhiteSpace(seqServerUrl) ? "http://seq" : seqServerUrl) + .WriteTo.Http(string.IsNullOrWhiteSpace(logstashUrl) ? "http://logstash:8080" : logstashUrl) + .ReadFrom.Configuration(configuration) + .CreateLogger(); +} + +IConfiguration GetConfiguration() +{ + var builder = new ConfigurationBuilder() + .SetBasePath(Directory.GetCurrentDirectory()) + .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) + .AddEnvironmentVariables(); + + var config = builder.Build(); + + if (config.GetValue("UseVault", false)) + { + builder.AddAzureKeyVault( + $"https://{config["Vault:Name"]}.vault.azure.net/", + config["Vault:ClientId"], + config["Vault:ClientSecret"]); } + + return builder.Build(); +} + +(int httpPort, int grpcPort) GetDefinedPorts(IConfiguration config) +{ + var grpcPort = config.GetValue("GRPC_PORT", 5001); + var port = config.GetValue("PORT", 80); + return (port, grpcPort); +} + +public class Program +{ + + public static string Namespace = typeof(Startup).Namespace; + public static string AppName = Namespace.Substring(Namespace.LastIndexOf('.', Namespace.LastIndexOf('.') - 1) + 1); } \ No newline at end of file diff --git a/src/Services/Ordering/Ordering.API/Startup.cs b/src/Services/Ordering/Ordering.API/Startup.cs index a8da9a35c..f0e251b89 100644 --- a/src/Services/Ordering/Ordering.API/Startup.cs +++ b/src/Services/Ordering/Ordering.API/Startup.cs @@ -230,8 +230,7 @@ public static IServiceCollection AddCustomDbContext(this IServiceCollection services, IConfiguration configuration) { - services.AddEntityFrameworkSqlServer() - .AddDbContext(options => + services.AddDbContext(options => { options.UseSqlServer(configuration["ConnectionString"], sqlServerOptionsAction: sqlOptions => diff --git a/src/Services/Ordering/Ordering.BackgroundTasks/Dockerfile b/src/Services/Ordering/Ordering.BackgroundTasks/Dockerfile index fc6b14681..d21305d11 100644 --- a/src/Services/Ordering/Ordering.BackgroundTasks/Dockerfile +++ b/src/Services/Ordering/Ordering.BackgroundTasks/Dockerfile @@ -1,8 +1,8 @@ -FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base +FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base WORKDIR /app EXPOSE 80 -FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build +FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build WORKDIR /src # It's important to keep lines from here down to "COPY . ." identical in all Dockerfiles diff --git a/src/Services/Ordering/Ordering.BackgroundTasks/Ordering.BackgroundTasks.csproj b/src/Services/Ordering/Ordering.BackgroundTasks/Ordering.BackgroundTasks.csproj index 012a0fa18..d85b2dddf 100644 --- a/src/Services/Ordering/Ordering.BackgroundTasks/Ordering.BackgroundTasks.csproj +++ b/src/Services/Ordering/Ordering.BackgroundTasks/Ordering.BackgroundTasks.csproj @@ -1,7 +1,7 @@  - netcoreapp3.1 + net5.0 dotnet-Ordering.BackgroundTasks-9D3E1DD6-405B-447F-8AAB-1708B36D260E false Linux @@ -9,22 +9,23 @@ - - - - - - - + + + + + + + - - - + + + - + + diff --git a/src/Services/Ordering/Ordering.Domain/Ordering.Domain.csproj b/src/Services/Ordering/Ordering.Domain/Ordering.Domain.csproj index 3f95f3c0b..ce9c519ae 100644 --- a/src/Services/Ordering/Ordering.Domain/Ordering.Domain.csproj +++ b/src/Services/Ordering/Ordering.Domain/Ordering.Domain.csproj @@ -1,12 +1,12 @@  - netstandard2.1 + net5.0 - - + + diff --git a/src/Services/Ordering/Ordering.FunctionalTests/Ordering.FunctionalTests.csproj b/src/Services/Ordering/Ordering.FunctionalTests/Ordering.FunctionalTests.csproj index 523c725fc..7fb973c53 100644 --- a/src/Services/Ordering/Ordering.FunctionalTests/Ordering.FunctionalTests.csproj +++ b/src/Services/Ordering/Ordering.FunctionalTests/Ordering.FunctionalTests.csproj @@ -1,7 +1,7 @@  - netcoreapp3.1 + net5.0 false @@ -17,10 +17,10 @@ - - - - + + + + all runtime; build; native; contentfiles; analyzers diff --git a/src/Services/Ordering/Ordering.FunctionalTests/appsettings.json b/src/Services/Ordering/Ordering.FunctionalTests/appsettings.json index 07bb1638a..f038bedb6 100644 --- a/src/Services/Ordering/Ordering.FunctionalTests/appsettings.json +++ b/src/Services/Ordering/Ordering.FunctionalTests/appsettings.json @@ -2,10 +2,11 @@ "ConnectionString": "Server=tcp:127.0.0.1,5433;Database=Microsoft.eShopOnContainers.Services.OrderingDb;User Id=sa;Password=Pass@word;", "ExternalCatalogBaseUrl": "http://localhost:5101", "IdentityUrl": "http://localhost:5105", + "IdentityUrlExternal": "http://localhost:5105", "isTest": "true", "EventBusConnection": "localhost", "CheckUpdateTime": "30000", "GracePeriodTime": "1", "SubscriptionClientName": "Ordering", - "SuppressCheckForUnhandledSecurityMetadata":true + "SuppressCheckForUnhandledSecurityMetadata": true } diff --git a/src/Services/Ordering/Ordering.Infrastructure/EntityConfigurations/OrderEntityTypeConfiguration.cs b/src/Services/Ordering/Ordering.Infrastructure/EntityConfigurations/OrderEntityTypeConfiguration.cs index 711f14b08..4e32763eb 100644 --- a/src/Services/Ordering/Ordering.Infrastructure/EntityConfigurations/OrderEntityTypeConfiguration.cs +++ b/src/Services/Ordering/Ordering.Infrastructure/EntityConfigurations/OrderEntityTypeConfiguration.cs @@ -24,6 +24,10 @@ namespace Ordering.Infrastructure.EntityConfigurations orderConfiguration .OwnsOne(o => o.Address, a => { + // Explicit configuration of the shadow key property in the owned type + // as a workaround for a documented issue in EF Core 5: https://github.com/dotnet/efcore/issues/20740 + a.Property("OrderId") + .UseHiLo("orderseq", OrderingContext.DEFAULT_SCHEMA); a.WithOwner(); }); diff --git a/src/Services/Ordering/Ordering.Infrastructure/Ordering.Infrastructure.csproj b/src/Services/Ordering/Ordering.Infrastructure/Ordering.Infrastructure.csproj index 6675a2301..767694ad1 100644 --- a/src/Services/Ordering/Ordering.Infrastructure/Ordering.Infrastructure.csproj +++ b/src/Services/Ordering/Ordering.Infrastructure/Ordering.Infrastructure.csproj @@ -1,7 +1,7 @@  - netstandard2.1 + net5.0 @@ -9,9 +9,11 @@ - - - + + + + + diff --git a/src/Services/Ordering/Ordering.Infrastructure/OrderingContext.cs b/src/Services/Ordering/Ordering.Infrastructure/OrderingContext.cs index d7991b81c..f6e6d4a02 100644 --- a/src/Services/Ordering/Ordering.Infrastructure/OrderingContext.cs +++ b/src/Services/Ordering/Ordering.Infrastructure/OrderingContext.cs @@ -147,6 +147,10 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.Infrastructure return Task.FromResult(default(TResponse)); } + public Task Send(object request, CancellationToken cancellationToken = default) + { + return Task.FromResult(default(object)); + } } } } diff --git a/src/Services/Ordering/Ordering.SignalrHub/Dockerfile b/src/Services/Ordering/Ordering.SignalrHub/Dockerfile index db71e7330..29eb9bd6d 100644 --- a/src/Services/Ordering/Ordering.SignalrHub/Dockerfile +++ b/src/Services/Ordering/Ordering.SignalrHub/Dockerfile @@ -1,8 +1,8 @@ -FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base +FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base WORKDIR /app EXPOSE 80 -FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build +FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build WORKDIR /src # It's important to keep lines from here down to "COPY . ." identical in all Dockerfiles diff --git a/src/Services/Ordering/Ordering.SignalrHub/Ordering.SignalrHub.csproj b/src/Services/Ordering/Ordering.SignalrHub/Ordering.SignalrHub.csproj index ebe4cb70e..d93101961 100644 --- a/src/Services/Ordering/Ordering.SignalrHub/Ordering.SignalrHub.csproj +++ b/src/Services/Ordering/Ordering.SignalrHub/Ordering.SignalrHub.csproj @@ -1,7 +1,7 @@  - netcoreapp3.1 + net5.0 ..\..\..\..\docker-compose.dcproj false true @@ -13,25 +13,25 @@ - - - - - - - + + + + + + + - - + + - + diff --git a/src/Services/Ordering/Ordering.UnitTests/Ordering.UnitTests.csproj b/src/Services/Ordering/Ordering.UnitTests/Ordering.UnitTests.csproj index 1ef8fc554..779c1cc56 100644 --- a/src/Services/Ordering/Ordering.UnitTests/Ordering.UnitTests.csproj +++ b/src/Services/Ordering/Ordering.UnitTests/Ordering.UnitTests.csproj @@ -1,17 +1,17 @@  - netcoreapp3.1 + net5.0 false false - - - - - + + + + + all runtime; build; native; contentfiles; analyzers