public async Task <ProcessorResponse> ExecuteAsync(AuthoriseRequest request)
        {
            var acquirerRequest = _Mapper.Map <AuthoriseRequest, AcquirerRequest>(request);

            var acquirerResponse = await _acquirerHandler.ProcessAsync(acquirerRequest);

            var payment = new Payment
            {
                Id = Guid.NewGuid().ToString(),
                MerchantAccount   = request.MerchantAccount,
                AcquirerReference = acquirerResponse.Id,
                AcquirerStatus    = acquirerResponse.Status,
                Amount            = request.Amount,
                Currency          = request.CurrencyCode,
                CardDetails       = _cardDetailsMasker.Mask(new CardDetails
                {
                    CardNumber = request.CardDetails.CardNumber,
                    ExpiryDate = request.CardDetails.ExpiryDate
                })
            };

            //paymentParameters.MerchantAccount, could use merchant id to isolate data
            //event sourcing to keep record of all interactions and its sequence
            await _repository.SaveAsync(payment);

            return(_Mapper.Map <Payment, ProcessorResponse>(payment));
        }
        public async Task <AcquirerResponse> ProcessAsync(AcquirerRequest request)
        {
            //_monitor.AddParameter(request.PaymentOperation);
            //_monitor.AddParameter(request.DesignatedAccount);
            //_monitor.AddParameter(request.CurrencyCode);
            //_monitor.AddParameter(request.Amount);
            //_monitor.AddParameter(request.CardDetails.CardNumber);
            //_monitor.AddParameter(request.CardDetails.ExpiryDate);

            AcquirerResponse acquirerResponse;

            //using (_monitor.Timer(nameof(IAcquirerHandler)))
            //{
            acquirerResponse = await _inner.ProcessAsync(request);

            //}

            //_monitor.AddParameter(_acquirerResponse.Id);
            //_monitor.AddParameter(_acquirerResponse.Status);

            return(acquirerResponse);
        }