public async Task <Response <InitiatePaymentResponse> > StartNewTransaction(InitiateTransactionCommand request)
        {
            var retrieveUser = await _accountService.GetUserById(_authenticatedUser.UserId);

            if (!retrieveUser.Succeeded || retrieveUser.Data is null)
            {
                return new Response <InitiatePaymentResponse> {
                           Succeeded = false, Message = retrieveUser.Message, Errors = retrieveUser.Errors
                }
            }
            ;

            var transaction = _mapper.Map <Transaction>(request);

            transaction.UserId            = _authenticatedUser.UserId;
            transaction.Reference         = Guid.NewGuid().ToString().Replace("-", string.Empty);
            transaction.TransactionStatus = Domain.Enums.TransactionStatus.Initiated;
            await this.AddAsync(transaction);

            var paymentRequest = new InitiatePaymentRequest
            {
                //paystack accepts amount in kobo, please do not change except standards have changed
                Amount       = (transaction.Amount * 100).ToString(),
                Email        = retrieveUser.Data.Email,
                Reference    = transaction.Reference,
                Callback_Url = $"{_paystackSettings.PaymentCallback}"
            };
            var response = await _paymentService.InitializePaystackPayment(paymentRequest);

            if (response.status && response.data != null)
            {
                transaction.SuccessfullyInitiated = true;

                transaction.InitiateMessage = response.message;
                await this.UpdateAsync(transaction);

                return(new Response <InitiatePaymentResponse>
                {
                    Data = response.data,
                    Message = response.message,
                    Succeeded = response.status
                });
            }
            transaction.SuccessfullyInitiated = false;
            transaction.InitiateMessage       = response.message;
            await this.UpdateAsync(transaction);

            return(new Response <InitiatePaymentResponse> {
                Succeeded = response.status, Message = response.message,
            });
        }
    }
 public async Task <IActionResult> StartTransaction(InitiateTransactionCommand command)
 {
     return(Ok(await Mediator.Send(command)));
 }