Example #1
0
        private async Task <ResponseMessage> CreateCustomer(CreateNewUserCommand message)
        {
            var user = await _userRegisterProvider.FindByEmailAsync(message.Email).ConfigureAwait(false);

            var userSaved = new UserSaveIntegrationEvent(Guid.Parse(user.Id), message.Name, user.Email, message.IdentityNumber);

            try
            {
                var result = await _messageBus.RequestAsync <UserSaveIntegrationEvent, ResponseMessage>(userSaved).ConfigureAwait(false);

                if (!result.IsValid())
                {
                    var @event = new UserCanceledEvent(Guid.Parse(user.Id), message.IdentityNumber, message.Name, message.Email);
                    @event.ValidationResult = result.ValidResult;
                    await _mediator.PublishEvent(@event);

                    return(result);
                }
                await _mediator.PublishEvent(new CustomerCreatedEvent(result.AggregateId, message.Name, message.Email)).ConfigureAwait(false);

                return(result);
            }
            catch (Exception ex)
            {
                var @event = new UserCanceledEvent(Guid.Parse(user.Id), message.IdentityNumber, message.Name, message.Email);
                @event.ValidationResult.Errors.Add(new FluentValidation.Results.ValidationFailure(string.Empty, ex.Message));
                await _mediator.PublishEvent(@event).ConfigureAwait(false);

                return(new ResponseMessage(@event.ValidationResult));
            }
        }
Example #2
0
        private async Task <ResponseMessage> SaveCustomer(UserSaveIntegrationEvent message)
        {
            var customerCommand = new SaveCustomerCommand(message.AggregateId, message.Name, message.Email, message.IdentityNumber);
            CommandResult <ValidationResult> result;

            using (var scope = _serviceProvider.CreateScope()) // Create scope inside the singleton (Lifecicle scope)
            {
                //Basically service locator is used When it is outside the context or when the class cannot pass arguments through the constructor
                var mediator = scope.ServiceProvider.GetRequiredService <IMediatorHandler>();
                result = await mediator.SendCommand <SaveCustomerCommand, ValidationResult>(customerCommand);
            }

            var responseMessage = new ResponseMessage(result.ValidationResult);

            responseMessage.AggregateId = message.AggregateId;
            return(responseMessage);
        }