示例#1
0
        public InvoiceRepository(ApplicationDbContextFactory contextFactory, string dbreezePath,
                                 BTCPayNetworkProvider networks, PaymentMethodHandlerDictionary paymentMethodHandlerDictionary)
        {
            int retryCount = 0;

retry:
            try
            {
                _Engine = new DBriizeEngine(dbreezePath);
            }
            catch when(retryCount++ < 5)
            {
                goto retry;
            }
            _IndexerThread  = new CustomThreadPool(1, "Invoice Indexer");
            _ContextFactory = contextFactory;
            _Networks       = networks;
            _paymentMethodHandlerDictionary = paymentMethodHandlerDictionary;
        }
示例#2
0
        public static async Task ActivateInvoicePaymentMethod(this InvoiceRepository invoiceRepository,
                                                              EventAggregator eventAggregator, BTCPayNetworkProvider btcPayNetworkProvider, PaymentMethodHandlerDictionary paymentMethodHandlerDictionary,
                                                              StoreData store, InvoiceEntity invoice, PaymentMethodId paymentMethodId)
        {
            var eligibleMethodToActivate = invoice.GetPaymentMethod(paymentMethodId);

            if (!eligibleMethodToActivate.GetPaymentMethodDetails().Activated)
            {
                var payHandler       = paymentMethodHandlerDictionary[paymentMethodId];
                var supportPayMethod = invoice.GetSupportedPaymentMethod()
                                       .Single(method => method.PaymentId == paymentMethodId);
                var         paymentMethod = invoice.GetPaymentMethod(paymentMethodId);
                var         network       = btcPayNetworkProvider.GetNetwork(paymentMethodId.CryptoCode);
                var         prepare       = payHandler.PreparePayment(supportPayMethod, store, network);
                InvoiceLogs logs          = new InvoiceLogs();
                try
                {
                    logs.Write($"{paymentMethodId}: Activating", InvoiceEventData.EventSeverity.Info);
                    var newDetails = await
                                     payHandler.CreatePaymentMethodDetails(logs, supportPayMethod, paymentMethod, store, network,
                                                                           prepare);

                    eligibleMethodToActivate.SetPaymentMethodDetails(newDetails);
                    await invoiceRepository.UpdateInvoicePaymentMethod(invoice.Id, eligibleMethodToActivate);
                }
                catch (PaymentMethodUnavailableException ex)
                {
                    logs.Write($"{paymentMethodId}: Payment method unavailable ({ex.Message})", InvoiceEventData.EventSeverity.Error);
                }
                catch (Exception ex)
                {
                    logs.Write($"{paymentMethodId}: Unexpected exception ({ex})", InvoiceEventData.EventSeverity.Error);
                }

                await invoiceRepository.AddInvoiceLogs(invoice.Id, logs);

                eventAggregator.Publish(new InvoiceNeedUpdateEvent(invoice.Id));
            }
        }