public TopupResultDTO GenerateTopUp(string account, decimal amount) { string referenceNumber = GenerateReferenceNumber(18); bool isReference = _transactionRepository.CheckReference(referenceNumber); // ?? while (isReference) { referenceNumber = GenerateReferenceNumber(18); isReference = _transactionRepository.CheckReference(referenceNumber); if (!isReference) { break; } } UserEntity userEntity = _userRepository.GetUserByAccountNumber(account); if (userEntity == null) { return(null); } int otherId = userEntity.Id; bool isCreateTopUP = _transactionRepository.CreateNewTopUp(referenceNumber, otherId, amount); var topupData = _transactionRepository.GetTransactionByReferenceNumber(referenceNumber); TopupResultDTO returnData = new TopupResultDTO(); returnData.ReferenceNumber = referenceNumber; returnData.ExpireDate = topupData.CreateDateTime.AddMinutes(15); return(isCreateTopUP ? returnData : null); }