public async Task <bool> ConcludePaystack(PaystackTransactionData data) { PaymentChannel channel = await DataContext.Store.GetOneAsync <PaymentChannel>(p => p.Type == ChannelType.Paystack); if (!decimal.TryParse(data.Amount, out decimal transactionAmount)) { return(false); } if (!Guid.TryParse((string)data.Metadata["walletId"], out Guid walletId)) { return(false); } if (!Guid.TryParse(data.Reference, out Guid transactionId)) { return(false); } User platformAccount = DataContext.PlatformAccount; Wallet wallet = await DataContext.Store.GetByIdAsync <Wallet>(walletId); decimal amount = transactionAmount / channel.ConversionRate; await CreateTransaction(wallet, amount, TransactionType.Deposit, ChannelType.Paystack); if (data.Authorization.Reusable && string.IsNullOrWhiteSpace(wallet.PaystackAuthorization)) { wallet.PaystackAuthorization = data.Authorization.AuthorizationCode; await DataContext.Store.UpdateOneAsync(wallet.User); } return(true); }
public async Task <bool> ConcludePaystack(PaystackTransactionData data, PaymentType type, UserTransactionMetadata meta = null) { if (type != PaymentType.Deposit && type != PaymentType.Withdrawal && type != PaymentType.Direct) { return(false); } PaymentChannel channel = await DataContext.Store .GetOneAsync <PaymentChannel, int>(p => p.Type == ChannelType.Paystack); if (!decimal.TryParse(data.Amount, out decimal transactionAmount)) { return(false); } if (!Guid.TryParse((string)data.Metadata["walletId"], out Guid walletId)) { return(false); } if (!Guid.TryParse(data.Reference, out Guid transactionId)) { return(false); } Wallet wallet = await DataContext.Store.GetByIdAsync <Wallet>(walletId); decimal amount = transactionAmount / channel.ConversionRate; await CreateTransaction(wallet, amount, type, ChannelType.Paystack, Status.Approved, meta); if (data.Authorization.Reusable && string.IsNullOrWhiteSpace(wallet.PaystackAuthorization)) { wallet.PaystackAuthorization = data.Authorization.AuthorizationCode; await DataContext.Store.UpdateOneAsync(wallet.User); } return(true); }