public async Task <IActionResult> Checkout([FromBody] BasketCheckout basketCheckout, [FromHeader(Name = "x-requestid")] string requestId)
        {
            var userId = _identitySvc.GetUserIdentity();

            basketCheckout.RequestId = (Guid.TryParse(requestId, out Guid guid) && guid != Guid.Empty) ?
                                       guid : basketCheckout.RequestId;

            var basket = await _repository.GetBasketAsync(userId);

            var eventMessage = new UserCheckoutAcceptedIntegrationEvent(userId, basketCheckout.City, basketCheckout.Street,
                                                                        basketCheckout.State, basketCheckout.Country, basketCheckout.ZipCode, basketCheckout.CardNumber, basketCheckout.CardHolderName,
                                                                        basketCheckout.CardExpiration, basketCheckout.CardSecurityNumber, basketCheckout.CardTypeId, basketCheckout.Buyer, basketCheckout.RequestId, basket);

            // Once basket is checkout, sends an integration event to
            // ordering.api to convert basket to order and proceeds with
            // order creation process
            await _endpoint.Publish(eventMessage);

            if (basket == null)
            {
                return(BadRequest());
            }

            return(Accepted());
        }
        public async Task Handle_get_request_Id_Test()
        {
            ////Arrange
            IdentifiedCommand <CreateOrderCommand, bool> reqCreateOrder = null;

            _mediatorMock
            .Setup(x => x.Send(
                       It.IsAny <IdentifiedCommand <CreateOrderCommand, bool> >(),
                       It.IsAny <CancellationToken>()))
            .Callback <IRequest <bool>, CancellationToken>(
                (req, token) => reqCreateOrder = (IdentifiedCommand <CreateOrderCommand, bool>)req)
            .Returns(Task.FromResult(true));

            UserCheckoutAcceptedIntegrationEvent @event = new UserCheckoutAcceptedIntegrationEvent(
                "user123", null, null, null, null, null, null, null, null,
                DateTime.Now, null,
                333, null,
                Guid.NewGuid(),
                new CustomerBasket("user123")
                );
            // action
            var handler = new UserCheckoutAcceptedIntegrationEventHandler(_mediatorMock.Object, _logger.Object);
            await handler.Handle(@event);

            // assert
            Assert.Equal("user123", reqCreateOrder.Command.UserId);
        }
        public async Task <ActionResult> CheckoutAsync(
            [FromBody] BasketCheckout basketCheckout)
        {
            var basket = await _basketRespository.GetBasketAsync(basketCheckout.Buyer);

            if (basket == null)
            {
                return(BadRequest());
            }

            var eventMessage = new UserCheckoutAcceptedIntegrationEvent(
                basketCheckout.Buyer, "", basketCheckout.City, basketCheckout.Street,
                basketCheckout.State, basketCheckout.Country, basketCheckout.ZipCode,
                basketCheckout.CardNumber, basketCheckout.CardHolderName,
                basketCheckout.CardExpiration, basketCheckout.CardSecurityNumber,
                basketCheckout.CardTypeId, basketCheckout.Buyer, basketCheckout.RequestId, basket);

            // Once basket is checkout, sends an integration event to
            // ordering.api to convert basket to order and proceeds with
            // order creation process
            try
            {
                _eventBus.Publish(eventMessage);
            }
            catch (Exception ex)
            {
                Log.Error(ex, "ERROR Publishing integration event: {IntegrationEventId} from {AppName}",
                          eventMessage.Id, Program.AppName);

                throw;
            }

            return(Accepted());
        }
Exemple #4
0
        public async Task PublishEventsThroughEventBusAsync_PendingEvents_EventsArePublished(
            [Frozen] Mock <IIntegrationEventLogService> mockEventLogService,
            [Frozen] Mock <IEventBus> mockEventBus,
            SalesOrderIntegrationEventService sut,
            Guid transactionId,
            UserCheckoutAcceptedIntegrationEvent integrationEvent
            )
        {
            //Arrange
            var eventLogs = Enumerable.Repeat(
                new IntegrationEventLogEntry(integrationEvent, transactionId), 3
                )
                            .ToList();

            mockEventLogService.Setup(_ => _.RetrieveEventLogsPendingToPublishAsync(
                                          It.IsAny <Guid>()
                                          ))
            .ReturnsAsync(eventLogs);

            //Act
            await sut.PublishEventsThroughEventBusAsync(transactionId);

            //Assert
            mockEventLogService.Verify(_ => _.MarkEventAsInProgressAsync(It.IsAny <Guid>()),
                                       Times.Exactly(eventLogs.Count)
                                       );

            mockEventBus.Verify(_ => _.Publish(It.IsAny <IntegrationEvent>()),
                                Times.Exactly(eventLogs.Count)
                                );

            mockEventLogService.Verify(_ => _.MarkEventAsPublishedAsync(It.IsAny <Guid>()),
                                       Times.Exactly(eventLogs.Count)
                                       );
        }
Exemple #5
0
        public async Task <IActionResult> checkout()
        {
            Guid userId = Guid.Empty;//AddCookie();



            try
            {
                var cart = await _cartService.GetCart(userId);

                if (cart == null)
                {
                    return(BadRequest());
                }

                var eventMessage = new UserCheckoutAcceptedIntegrationEvent(userId, cart);

                //orderService.CreateOrder(cartDto);
                //_eventBus.Publish(eventMessage);

                return(Ok(cart));
            }
            catch (Exception e)
            {
                throw;
            }
        }
Exemple #6
0
        public async Task <ActionResult> CheckoutAsync([FromBody] BasketCheckout basketCheckout, [FromHeader(Name = "x-requestid")] string requestId)
        {
            var userId = _identityService.GetUserIdentity();

            basketCheckout.RequestId = (Guid.TryParse(requestId, out Guid guid) && guid != Guid.Empty) ?
                                       guid : basketCheckout.RequestId;

            var basket = await _repository.GetBasketAsync(userId);

            if (basket == null)
            {
                return(BadRequest());
            }

            var userName = this.HttpContext.User.FindFirst(x => x.Type == ClaimTypes.Name).Value;

            var eventMessage = new UserCheckoutAcceptedIntegrationEvent(userId, userName, basketCheckout.IDNumber, basketCheckout.Request,
                                                                        basketCheckout.PaymentTypeId, basketCheckout.GenderId, basketCheckout.Student, basketCheckout.RequestId, basket);

            // Once basket is checkout, it sends an integration event to
            // applying.api to convert basket to application and proceeds with
            // application creation process
            try
            {
                _eventBus.Publish(eventMessage);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "ERROR Publishing integration event: {IntegrationEventId} from {AppName}", eventMessage.Id, Program.AppName);

                throw;
            }

            return(Accepted());
        }
Exemple #7
0
        public async Task <IActionResult> Checkout([FromBody] BasketCheckout basketCheckout)
        {
            var userId   = _identitySvc.GetUserIdentity();
            var userName = User.FindFirst(x => x.Type == "unique_name").Value;

            basketCheckout.RequestId = Guid.NewGuid();

            var basket = await _repository.GetBasketAsync(userId);

            if (basket == null)
            {
                return(BadRequest());
            }

            var eventMessage = new UserCheckoutAcceptedIntegrationEvent(userId, userName, basketCheckout.City,
                                                                        basketCheckout.Street,
                                                                        basketCheckout.State, basketCheckout.Country, basketCheckout.ZipCode, basketCheckout.CardNumber,
                                                                        basketCheckout.CardHolderName,
                                                                        basketCheckout.CardExpiration, basketCheckout.CardSecurityNumber, basketCheckout.CardTypeId,
                                                                        basketCheckout.Buyer, basketCheckout.RequestId, basket);

            // Once basket is checkout, sends an integration event to
            // Ordering.api to convert basket to order and proceeds with
            // order creation process
            _eventBus.Publish(eventMessage);

            return(Accepted());
        }
        public async Task Handle(UserCheckoutAcceptedIntegrationEvent integrationEvent)
        {
            if (integrationEvent.RequestId != Guid.Empty)
            {
                var orderingProcess = GetOrderingProcessActor(integrationEvent.RequestId);

                await orderingProcess.Submit(integrationEvent.UserId, integrationEvent.UserName,
                                             integrationEvent.Street, integrationEvent.City, integrationEvent.ZipCode,
                                             integrationEvent.State, integrationEvent.Country, integrationEvent.Basket);
            }
            else
            {
                _logger.LogWarning("Invalid IntegrationEvent - RequestId is missing - {@IntegrationEvent}", integrationEvent);
            }
        }
        public async Task <ActionResult> CheckoutAsync(
            [FromBody] BasketCheckout basketCheckout, [FromHeader(Name = "x-requestid")] string requestId)
        {
            var userId = _identityService.GetUserIdentity();

            basketCheckout.RequestId = (Guid.TryParse(requestId, out Guid guid) && guid != Guid.Empty) ?
                                       guid : basketCheckout.RequestId;

            var basket = await _repository.GetBasketAsync(userId);

            if (basket == null)
            {
                return(BadRequest());
            }

            var userName = User.FindFirst(x => x.Type == "unique_name").Value;

            var eventMessage = new UserCheckoutAcceptedIntegrationEvent(
                userId, userName, basketCheckout.City, basketCheckout.Street,
                basketCheckout.State, basketCheckout.Country, basketCheckout.ZipCode,
                basketCheckout.CardNumber, basketCheckout.CardHolderName,
                basketCheckout.CardExpiration, basketCheckout.CardSecurityNumber, basketCheckout.CardTypeId,
                basketCheckout.Buyer, basketCheckout.RequestId, basket);

            // Once basket is checkout, sends an integration event to
            // ordering.api to convert basket to order and proceeds with
            // order creation process
            try
            {
                _logger.LogInformation(
                    "----- Publishing integration event: {IntegrationEventId} from {AppName} - ({@IntegrationEvent})",
                    eventMessage.Id, Program.AppName, eventMessage);

                _eventBus.Publish(eventMessage);
            }
            catch (Exception ex)
            {
                _logger.LogError(
                    ex, "ERROR Publishing integration event: {IntegrationEventId} from {AppName}",
                    eventMessage.Id, Program.AppName);

                throw;
            }

            return(Accepted());
        }
Exemple #10
0
        public async Task AddAndSaveEventAsync_SaveEventAsyncIsCalled(
            [Frozen] Mock <IIntegrationEventLogService> mockEventLogService,
            SalesOrderIntegrationEventService sut,
            UserCheckoutAcceptedIntegrationEvent integrationEvent
            )
        {
            //Arrange

            //Act
            await sut.AddAndSaveEventAsync(integrationEvent);

            //Assert
            mockEventLogService.Verify(_ => _.SaveEventAsync(
                                           It.IsAny <IntegrationEvent>(),
                                           It.IsAny <Guid>()
                                           ));
        }
        public async Task Handle_GuidNotEmpty_CommandIsSent(
            [Frozen] Mock <IMediator> mockMediator,
            UserCheckoutAcceptedIntegrationEventHandler sut,
            UserCheckoutAcceptedIntegrationEvent integrationEvent
            )
        {
            //Arrange

            //Act
            await sut.Handle(integrationEvent);

            //Assert
            mockMediator.Verify(_ => _.Send(
                                    It.IsAny <IRequest <bool> >(),
                                    It.IsAny <CancellationToken>()
                                    ));
        }
        public async Task Handle_mediator_sent_once_Test()
        {
            ////Arrange
            UserCheckoutAcceptedIntegrationEvent @event = new UserCheckoutAcceptedIntegrationEvent(
                "user123", null, null, null, null, null, null, null, null,
                DateTime.Now, null,
                333, null,
                Guid.NewGuid(),
                new CustomerBasket("user123")
                );
            // action
            var handler = new UserCheckoutAcceptedIntegrationEventHandler(_mediatorMock.Object, _logger.Object);
            await handler.Handle(@event);

            // assert
            _mediatorMock.Verify(
                h => h.Send(
                    It.IsAny <IdentifiedCommand <CreateOrderCommand, bool> >(),
                    It.IsAny <CancellationToken>()),
                Times.Once());
        }
Exemple #13
0
        public async Task <IActionResult> Checkout([FromBody] CartCheckout CartCheckout,
                                                   [FromHeader(Name = "x-requestid")] string requestId)
        {
            var borrowerId = _service.GetUserIdentity();

            CartCheckout.RequestId = (Guid.TryParse(requestId, out Guid guid) && guid != Guid.Empty) ?
                                     guid : CartCheckout.RequestId;

            var Cart = await _repository.GetCartAsync(borrowerId);

            if (Cart is null)
            {
                return(BadRequest());
            }

            var eventMessage = new UserCheckoutAcceptedIntegrationEvent();

            _eventBus.Publish(eventMessage);

            return(Accepted());
        }
Exemple #14
0
        public async Task <ActionResult> CheckoutAsync([FromBody] BasketCheckout basketCheckout, [FromHeader(Name = "x-requestid")] string requestId)
        {
            var userId = basketCheckout.Buyer;

            basketCheckout.RequestId = (Guid.TryParse(requestId, out Guid guid) && guid != Guid.Empty) ?
                                       guid : basketCheckout.RequestId;

            var basket = await _repository.GetBasketAsync(userId);

            if (basket == null)
            {
                return(BadRequest());
            }

            var userName = userId;

            var checkoutEventMessage = new UserCheckoutAcceptedIntegrationEvent(userId: userId,
                                                                                userName: userName, city: basketCheckout.City, street: basketCheckout.Street,
                                                                                state: basketCheckout.State, country: basketCheckout.Country,
                                                                                zipCode: basketCheckout.ZipCode, cardNumber: basketCheckout.CardNumber, cardHolderName: basketCheckout.CardHolderName,
                                                                                cardExpiration: basketCheckout.CardExpiration, cardSecurityNumber: basketCheckout.CardSecurityNumber,
                                                                                cardTypeId: basketCheckout.CardTypeId, buyer: userName, requestId: basketCheckout.RequestId,
                                                                                basket: basket);

            // Once basket is checkout, sends an integration event to
            // ordering.api to convert basket to order and proceeds with
            // order creation process
            try
            {
                _eventBus.Publish(checkoutEventMessage);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "ERROR Publishing integration event: {IntegrationEventId} from Basket", checkoutEventMessage.Id);

                throw;
            }

            return(Accepted());
        }
    public async Task <ActionResult> CheckoutAsync(
        [FromBody] BasketCheckout basketCheckout,
        [FromHeader(Name = "X-Request-Id")] string requestId)
    {
        var userId = _identityService.GetUserIdentity();

        var basket = await _repository.GetBasketAsync(userId);

        if (basket == null)
        {
            return(BadRequest());
        }

        var eventRequestId = Guid.TryParse(requestId, out Guid parsedRequestId)
            ? parsedRequestId : Guid.NewGuid();

        var eventMessage = new UserCheckoutAcceptedIntegrationEvent(
            userId,
            basketCheckout.UserEmail,
            basketCheckout.City,
            basketCheckout.Street,
            basketCheckout.State,
            basketCheckout.Country,
            basketCheckout.CardNumber,
            basketCheckout.CardHolderName,
            basketCheckout.CardExpiration,
            basketCheckout.CardSecurityCode,
            eventRequestId,
            basket);

        // Once basket is checkout, sends an integration event to
        // ordering.api to convert basket to order and proceed with
        // order creation process
        await _eventBus.PublishAsync(eventMessage);

        return(Accepted());
    }
 public async Task OrderStarted(UserCheckoutAcceptedIntegrationEvent @event)
 {
     var handler = _serviceProvider.GetRequiredService <UserCheckoutAcceptedIntegrationEventHandler>();
     await handler.Handle(@event);
 }