/// <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); }