public async Task ExchangeMoney(MoneyExchangeDto moneyExchangeDto)
        {
            var user = await _userRepository.GetAsync(moneyExchangeDto.UserId);

            if (user == null)
            {
                throw new UserNotFoundException($"{moneyExchangeDto.UserId} is not found.");
            }

            var currencyFrom = await _currencyRepository.GetAsync(moneyExchangeDto.CurrencyFrom);

            if (currencyFrom == null)
            {
                throw new CurrencyNotFoundException($"{moneyExchangeDto.CurrencyFrom} is not found.");
            }

            var currencyTo = await _currencyRepository.GetAsync(moneyExchangeDto.CurrencyTo);

            if (currencyTo == null)
            {
                throw new CurrencyNotFoundException($"{moneyExchangeDto.CurrencyTo} is not found.");
            }

            user.ExchangeMoney(new Money(moneyExchangeDto.Amount, currencyFrom), currencyTo);

            await _userRepository.UpdateBalanceSync(user);
        }
        public async Task When_ExchangeMoney_Then_ShouldReturn_Ok()
        {
            var fixture          = new Fixture();
            var moneyExchangeDto = new MoneyExchangeDto();

            _moneyExchangeAppServiceMock.Setup(x => x.ExchangeMoney(moneyExchangeDto));

            var moneyController = new MoneyController(_moneyExchangeAppServiceMock.Object);

            var result = await moneyController.ExchangeMoney(moneyExchangeDto);

            result.ShouldBeOfType <OkObjectResult>();
        }
        public async Task <IActionResult> ExchangeMoney([FromBody] MoneyExchangeDto moneyExchangeDto)
        {
            await _moneyExchangeAppService.ExchangeMoney(moneyExchangeDto);

            return(Ok(1));
        }