public async Task Execute(Input input)
        {
            if (input == null)
            {
                _outputHandler.Error("Input is null.");
                return;
            }
            var isEmailExist = await _registerUserService.GetEmailUser(input.Email.ToString());

            var isPhoneExist    = _registerUserService.GetMobileUser(input.Mobile.ToString()).Result;
            var isUserNameExist = await _registerUserService.GetNameUser(input.Name.ToString());

            if (isEmailExist != null)
            {
                _outputHandler.Error("Email Already Exist");
            }
            else if (isPhoneExist != null)
            {
                _outputHandler.Error("MobileNumber Already Exist");
            }
            else if (isUserNameExist != null)
            {
                _outputHandler.Error("UserName Already Exist");
            }
            //var customerId = _registerUserService.Execute(input.Name.ToString(), input.Password.ToString()); //add
            //if (customerId == null || customerId == Guid.Empty) //add
            else if (isEmailExist == null && isPhoneExist == null && isUserNameExist == null)
            {
                var registerOutput = _registerUserService.Execute(input.Name.ToString(), input.Password.ToString()
                                                                  , input.Email.ToString(), input.Mobile.ToString());
                if (registerOutput == null)
                {
                    _outputHandler.Error("An error throw when registering user ID"); //add
                    return;                                                          //add
                }

                var customer = _entityFactory.NewCustomer(registerOutput.CustomerId, input.SSN, input.Name);
                var account  = _entityFactory.NewAccount(customer.Id);

                ICredit credit = account.Deposit(input.InitialAmount);
                if (credit == null)
                {
                    _outputHandler.Error("An error happened when depositing the amount.");
                    return;
                }

                customer.Register(account.Id);

                await _customerRepository.Add(customer);

                await _accountRepository.Add(account, credit);

                Output output = new Output(customer, account, registerOutput.Token);
                _outputHandler.Handle(output);
            }
        }