From f302316cb0e155607b58da300a97586a34ad78e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Thu, 11 May 2017 18:34:07 +0200 Subject: [PATCH] Fix issue identityService.getuseridentity fails when called from integration event --- .../Application/Commands/CreateOrderCommand.cs | 6 +++++- .../Commands/CreateOrderCommandHandler.cs | 2 +- ...AggregateWhenOrderStartedDomainEventHandler.cs | 6 +++--- ...UserCheckoutAcceptedIntegrationEventHandler.cs | 3 +-- src/Services/Ordering/Ordering.API/Startup.cs | 15 +++++++-------- .../AggregatesModel/OrderAggregate/Order.cs | 8 ++++---- .../Events/OrderStartedDomainEvent.cs | 4 +++- src/Web/WebMVC/Services/OrderingService.cs | 4 +++- 8 files changed, 27 insertions(+), 21 deletions(-) diff --git a/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderCommand.cs b/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderCommand.cs index d83293308..19fa3b818 100644 --- a/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderCommand.cs +++ b/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderCommand.cs @@ -23,6 +23,9 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.API.Application.Commands [DataMember] private readonly List _orderItems; + [DataMember] + public string UserId { get; private set; } + [DataMember] public string City { get; private set; } @@ -61,11 +64,12 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.API.Application.Commands _orderItems = new List(); } - public CreateOrderCommand(List basketItems, string city, string street, string state, string country, string zipcode, + public CreateOrderCommand(List basketItems, string userId, string city, string street, string state, string country, string zipcode, string cardNumber, string cardHolderName, DateTime cardExpiration, string cardSecurityNumber, int cardTypeId) : this() { _orderItems = MapToOrderItems(basketItems); + UserId = userId; City = city; Street = street; State = state; diff --git a/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderCommandHandler.cs b/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderCommandHandler.cs index 0cc31c813..c0d0a0d2b 100644 --- a/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderCommandHandler.cs +++ b/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderCommandHandler.cs @@ -42,7 +42,7 @@ // methods and constructor so validations, invariants and business logic // make sure that consistency is preserved across the whole aggregate var address = new Address(message.Street, message.City, message.State, message.Country, message.ZipCode); - var order = new Order(address , message.CardTypeId, message.CardNumber, message.CardSecurityNumber, message.CardHolderName, message.CardExpiration); + var order = new Order(message.UserId, address, message.CardTypeId, message.CardNumber, message.CardSecurityNumber, message.CardHolderName, message.CardExpiration); order.SetOrderStatusId(OrderStatus.Submited.Id); foreach (var item in message.OrderItems) { diff --git a/src/Services/Ordering/Ordering.API/Application/DomainEventHandlers/OrderStartedEvent/ValidateOrAddBuyerAggregateWhenOrderStartedDomainEventHandler.cs b/src/Services/Ordering/Ordering.API/Application/DomainEventHandlers/OrderStartedEvent/ValidateOrAddBuyerAggregateWhenOrderStartedDomainEventHandler.cs index ada82118e..b2120904c 100644 --- a/src/Services/Ordering/Ordering.API/Application/DomainEventHandlers/OrderStartedEvent/ValidateOrAddBuyerAggregateWhenOrderStartedDomainEventHandler.cs +++ b/src/Services/Ordering/Ordering.API/Application/DomainEventHandlers/OrderStartedEvent/ValidateOrAddBuyerAggregateWhenOrderStartedDomainEventHandler.cs @@ -26,14 +26,14 @@ namespace Ordering.API.Application.DomainEventHandlers.OrderStartedEvent { var cardTypeId = (orderStartedEvent.CardTypeId != 0) ? orderStartedEvent.CardTypeId : 1; - var userGuid = _identityService.GetUserIdentity(); + //var userGuid = _identityService.GetUserIdentity(); - var buyer = await _buyerRepository.FindAsync(userGuid); + var buyer = await _buyerRepository.FindAsync(orderStartedEvent.UserId); bool buyerOriginallyExisted = (buyer == null) ? false : true; if (!buyerOriginallyExisted) { - buyer = new Buyer(userGuid); + buyer = new Buyer(orderStartedEvent.UserId); } buyer.VerifyOrAddPaymentMethod(cardTypeId, diff --git a/src/Services/Ordering/Ordering.API/Application/IntegrationEvents/EventHandling/UserCheckoutAcceptedIntegrationEventHandler.cs b/src/Services/Ordering/Ordering.API/Application/IntegrationEvents/EventHandling/UserCheckoutAcceptedIntegrationEventHandler.cs index 34169d152..7a5961cdd 100644 --- a/src/Services/Ordering/Ordering.API/Application/IntegrationEvents/EventHandling/UserCheckoutAcceptedIntegrationEventHandler.cs +++ b/src/Services/Ordering/Ordering.API/Application/IntegrationEvents/EventHandling/UserCheckoutAcceptedIntegrationEventHandler.cs @@ -14,7 +14,6 @@ namespace Ordering.API.Application.IntegrationEvents.EventHandling private readonly ILoggerFactory _logger; public UserCheckoutAcceptedIntegrationEventHandler(IMediator mediator, - IOrderingIntegrationEventService orderingIntegrationEventService, ILoggerFactory logger) { _mediator = mediator ?? throw new ArgumentNullException(nameof(mediator)); @@ -35,7 +34,7 @@ namespace Ordering.API.Application.IntegrationEvents.EventHandling var result = false; if (eventMsg.RequestId != Guid.Empty) { - var createOrderCommand = new CreateOrderCommand(eventMsg.Basket.Items, eventMsg.City, eventMsg.Street, + var createOrderCommand = new CreateOrderCommand(eventMsg.Basket.Items, eventMsg.UserId, eventMsg.City, eventMsg.Street, eventMsg.State, eventMsg.Country, eventMsg.ZipCode, eventMsg.CardNumber, eventMsg.CardHolderName, eventMsg.CardExpiration, eventMsg.CardSecurityNumber, eventMsg.CardTypeId); diff --git a/src/Services/Ordering/Ordering.API/Startup.cs b/src/Services/Ordering/Ordering.API/Startup.cs index 8b8bea53f..b5b01e068 100644 --- a/src/Services/Ordering/Ordering.API/Startup.cs +++ b/src/Services/Ordering/Ordering.API/Startup.cs @@ -125,13 +125,12 @@ return new DefaultRabbitMQPersistentConnection(factory, logger); }); - - services.AddSingleton(); services.AddSingleton(); - services.AddTransient(); + services.AddSingleton(); + services.AddTransient>(); services.AddTransient, OrderProcessSaga>(); - services.AddTransient(); - services.AddTransient(); + services.AddTransient>(); + services.AddTransient>(); services.AddOptions(); //configure autofac @@ -176,13 +175,13 @@ { var eventBus = app.ApplicationServices.GetRequiredService(); - eventBus.Subscribe>(); + eventBus.Subscribe>(); eventBus.Subscribe>(); - eventBus.Subscribe(); + eventBus.Subscribe>(); - eventBus.Subscribe(); + eventBus.Subscribe>(); } protected virtual void ConfigureAuth(IApplicationBuilder app) diff --git a/src/Services/Ordering/Ordering.Domain/AggregatesModel/OrderAggregate/Order.cs b/src/Services/Ordering/Ordering.Domain/AggregatesModel/OrderAggregate/Order.cs index 341d33c6f..0d8ef6b92 100644 --- a/src/Services/Ordering/Ordering.Domain/AggregatesModel/OrderAggregate/Order.cs +++ b/src/Services/Ordering/Ordering.Domain/AggregatesModel/OrderAggregate/Order.cs @@ -40,7 +40,7 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.O protected Order() { _orderItems = new List(); } - public Order(Address address, int cardTypeId, string cardNumber, string cardSecurityNumber, + public Order(string userId, Address address, int cardTypeId, string cardNumber, string cardSecurityNumber, string cardHolderName, DateTime cardExpiration, int? buyerId = null, int? paymentMethodId = null) { _orderItems = new List(); @@ -52,7 +52,7 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.O // Add the OrderStarterDomainEvent to the domain events collection // to be raised/dispatched when comitting changes into the Database [ After DbContext.SaveChanges() ] - AddOrderStartedDomainEvent(cardTypeId, cardNumber, + AddOrderStartedDomainEvent(userId, cardTypeId, cardNumber, cardSecurityNumber, cardHolderName, cardExpiration); } @@ -113,11 +113,11 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.Domain.AggregatesModel.O } } - private void AddOrderStartedDomainEvent(int cardTypeId, string cardNumber, + private void AddOrderStartedDomainEvent(string userId, int cardTypeId, string cardNumber, string cardSecurityNumber, string cardHolderName, DateTime cardExpiration) { var orderStartedDomainEvent = new OrderStartedDomainEvent( - this, cardTypeId, cardNumber, cardSecurityNumber, + this, userId, cardTypeId, cardNumber, cardSecurityNumber, cardHolderName, cardExpiration); this.AddDomainEvent(orderStartedDomainEvent); diff --git a/src/Services/Ordering/Ordering.Domain/Events/OrderStartedDomainEvent.cs b/src/Services/Ordering/Ordering.Domain/Events/OrderStartedDomainEvent.cs index 439a5d9ab..00ac96d45 100644 --- a/src/Services/Ordering/Ordering.Domain/Events/OrderStartedDomainEvent.cs +++ b/src/Services/Ordering/Ordering.Domain/Events/OrderStartedDomainEvent.cs @@ -12,6 +12,7 @@ namespace Ordering.Domain.Events public class OrderStartedDomainEvent : IAsyncNotification { + public string UserId { get; private set; } public int CardTypeId { get; private set; } public string CardNumber { get; private set; } public string CardSecurityNumber { get; private set; } @@ -19,12 +20,13 @@ namespace Ordering.Domain.Events public DateTime CardExpiration { get; private set; } public Order Order { get; private set; } - public OrderStartedDomainEvent(Order order, + public OrderStartedDomainEvent(Order order, string userId, int cardTypeId, string cardNumber, string cardSecurityNumber, string cardHolderName, DateTime cardExpiration) { Order = order; + UserId = userId; CardTypeId = cardTypeId; CardNumber = cardNumber; CardSecurityNumber = cardSecurityNumber; diff --git a/src/Web/WebMVC/Services/OrderingService.cs b/src/Web/WebMVC/Services/OrderingService.cs index 7329d1d14..7140b0eb3 100644 --- a/src/Web/WebMVC/Services/OrderingService.cs +++ b/src/Web/WebMVC/Services/OrderingService.cs @@ -98,6 +98,8 @@ namespace Microsoft.eShopOnContainers.WebMVC.Services public BasketDTO MapOrderToBasket(Order order) { + order.CardExpirationApiFormat(); + return new BasketDTO() { City = order.City, @@ -109,7 +111,7 @@ namespace Microsoft.eShopOnContainers.WebMVC.Services CardHolderName = order.CardHolderName, CardExpiration = order.CardExpiration, CardSecurityNumber = order.CardSecurityNumber, - CardTypeId = order.CardTypeId, + CardTypeId = 1, Buyer = order.Buyer, RequestId = order.RequestId };