public CcDepositResponse FromPendingRequest(Guid transactionId, CcDepositRequest request)
 {
     return new CcDepositResponse
         {
             AccountNumber = request.AccountNumber,
             Status = DepositStatus.Pending,
             TransactionId = transactionId
         };
 }
 public CcDepositResponse FromClearingTimeout(Guid transactionId, CcDepositRequest request, RequestTimeoutExpired source)
 {
     return new CcDepositResponse
         {
             AccountNumber = request.AccountNumber,
             Status = DepositStatus.Timedout,
             ErrorMessage = $"Clearing Api call timed out. Expiration Time={source.ExpirationTime}",
             TransactionId = transactionId
         };
 }
 public AuthorizationRequest FromDepositRequest(Guid transactionId, CcDepositRequest request)
 {
     return new AuthorizationRequest
         {
             TransactionId = transactionId,
             AccountNumber = request.AccountNumber,
             Amount = request.Amount,
             CardToken = "ABC123",
             CardType = CardType.MasterCard,
             Currency = request.Currency
         };
 }
 public CcDepositResponse FromClearingResponse(CcDepositRequest request, ClearingResponse source)
 {
     return new CcDepositResponse
         {
             AccountNumber = request.AccountNumber,
             Status = source.ClearingStatus == ClearingStatus.Rejected ? DepositStatus.Rejected : DepositStatus.Success,
             ErrorMessage =
                 source.ClearingStatus == ClearingStatus.Rejected
                     ? $"Clearing Api rejected transaction. ErrorCode={source.ErrorCode} ResponseCode={source.ResponseCode}"
                     : "",
             TransactionId = source.TransactionId
         };
 }
 public async Task<CcDepositResponse> CcDeposit(CcDepositRequest request)
 {
     try
     {
         var client =
             _bus.CreateRequestClient<CcDepositRequest, CcDepositResponse>(
                 new Uri(ConfigurationManager.AppSettings["GatewayServiceAddress"]), new TimeSpan(0, 0, 0, 30));
         return await client.Request(request);
     }
     catch (RequestTimeoutException)
     {
         return new CcDepositResponse {AccountNumber = request.AccountNumber, Status = DepositStatus.Timedout};
     }
 }