/// <summary>
 /// </summary>
 public UserService(
     AccountRepository accountRepository,
     EventHistoryRepository eventHistoryRepository,
     ILogger <UserService> logger)
 {
     _logger = logger;
     _eventHistoryRepository = eventHistoryRepository;
     Accounts = accountRepository.Accounts();
 }
        public override WithdrawResponse Handle(WithdrawRequest request)
        {
            var response = CreateResponse();
            // TODO: In real life, this would be part of an Account Facade/Manager wrapping the whole thing in a transaction

            var account = _repository.Accounts().First(a => a.AccountNumber.Equals(request.AccountNumber));

            string errorMessage = string.Empty;
            bool   isError      = false;

            if (account == null)
            {
                return new WithdrawResponse {
                           Account = new AccountDto(), IsError = true, ErrorMessage = "Account Not Found."
                }
            }
            ;

            // If there is not enough balance
            if (account.Balance < request.Amount)
            {
                errorMessage = string.Format("There are insufficient funds in account {0}", account.AccountNumber);

                isError = true;
            }
            // Execute the withdrawal and return the new balance
            else
            {
                account.Balance -= request.Amount;
                //_unitOfWork.Commit();
            }

            AccountDto dto = _mapper.MapToDto(account);

            return(new WithdrawResponse {
                Account = dto, IsError = isError, ErrorMessage = errorMessage
            });
        }
    }
        private void LoadDatabaseFromSnapshot()
        {
            // I lied, we won't load anything
            _currentVersion = 0;
            _tradingRepository.OrderBook().DeleteMany(
                Builders <OrderBookEntry> .Filter.Where(e => true)
                );
            _tradingRepository.HiddenOrders().DeleteMany(
                Builders <HiddenOrderEntry> .Filter.Where(e => true)
                );
            _tradingRepository.TransactionHistory().DeleteMany(
                Builders <TransactionHistoryEntry> .Filter.Where(e => true)
                );
            _tradingRepository.OrderHistory().DeleteMany(
                Builders <OrderHistoryEntry> .Filter.Where(e => true)
                );
            _accountRepository.Accounts().DeleteMany(
                new BsonDocumentFilterDefinition <AccountEntry>(new BsonDocument())
                );

            // This enables the version control semaphore
            _versionControl.Initialize(_currentVersion);
        }