mirror of
https://github.com/aljazceru/btcpayserver.git
synced 2025-12-18 22:44:29 +01:00
The Big Cleanup: Refactor BTCPay internals (#5809)
This commit is contained in:
@@ -1,48 +1,69 @@
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Reflection.Metadata;
|
||||
using BTCPayServer.Services.Invoices;
|
||||
using NBitpayClient;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Newtonsoft.Json.Serialization;
|
||||
|
||||
namespace BTCPayServer.Data
|
||||
{
|
||||
public static class InvoiceDataExtensions
|
||||
{
|
||||
public static readonly JsonSerializerSettings DefaultSerializerSettings;
|
||||
public static readonly JsonSerializer DefaultSerializer;
|
||||
static InvoiceDataExtensions()
|
||||
{
|
||||
(DefaultSerializerSettings, DefaultSerializer) = BlobSerializer.CreateSerializer(null as NBitcoin.Network);
|
||||
}
|
||||
public static void SetBlob(this InvoiceData invoiceData, InvoiceEntity blob)
|
||||
{
|
||||
if (blob.Metadata is null)
|
||||
blob.Metadata = new InvoiceMetadata();
|
||||
invoiceData.HasTypedBlob<InvoiceEntity>().SetBlob(blob);
|
||||
invoiceData.Currency = blob.Currency;
|
||||
invoiceData.Amount = blob.Price;
|
||||
invoiceData.HasTypedBlob<InvoiceEntity>().SetBlob(blob, DefaultSerializer);
|
||||
}
|
||||
public static InvoiceEntity GetBlob(this InvoiceData invoiceData, BTCPayNetworkProvider networks)
|
||||
public static InvoiceEntity GetBlob(this InvoiceData invoiceData)
|
||||
{
|
||||
#pragma warning disable CS0618 // Type or member is obsolete
|
||||
if (invoiceData.Blob is not null && invoiceData.Blob.Length != 0)
|
||||
var entity = invoiceData.HasTypedBlob<InvoiceEntity>().GetBlob(DefaultSerializerSettings);
|
||||
entity.Payments = invoiceData.Payments?
|
||||
.Select(p => p.GetBlob())
|
||||
.OrderBy(a => a.ReceivedTime)
|
||||
.ToList();
|
||||
#pragma warning restore CS0618
|
||||
var state = invoiceData.GetInvoiceState();
|
||||
entity.Id = invoiceData.Id;
|
||||
entity.Currency = invoiceData.Currency;
|
||||
if (invoiceData.Amount is decimal price)
|
||||
{
|
||||
var entity = JsonConvert.DeserializeObject<InvoiceEntity>(ZipUtils.Unzip(invoiceData.Blob), InvoiceRepository.DefaultSerializerSettings);
|
||||
entity.Networks = networks;
|
||||
if (entity.Metadata is null)
|
||||
{
|
||||
if (entity.Version < InvoiceEntity.GreenfieldInvoices_Version)
|
||||
{
|
||||
entity.MigrateLegacyInvoice();
|
||||
}
|
||||
else
|
||||
{
|
||||
entity.Metadata = new InvoiceMetadata();
|
||||
}
|
||||
}
|
||||
return entity;
|
||||
entity.Price = price;
|
||||
}
|
||||
else
|
||||
|
||||
entity.StoreId = invoiceData.StoreDataId;
|
||||
entity.ExceptionStatus = state.ExceptionStatus;
|
||||
entity.Status = state.Status;
|
||||
if (invoiceData.AddressInvoices != null)
|
||||
{
|
||||
var entity = invoiceData.HasTypedBlob<InvoiceEntity>().GetBlob();
|
||||
entity.Networks = networks;
|
||||
return entity;
|
||||
entity.AvailableAddressHashes = invoiceData.AddressInvoices.Select(a => a.GetAddress() + a.GetPaymentMethodId()).ToHashSet();
|
||||
}
|
||||
#pragma warning restore CS0618 // Type or member is obsolete
|
||||
if (invoiceData.Events != null)
|
||||
{
|
||||
entity.Events = invoiceData.Events.OrderBy(c => c.Timestamp).ToList();
|
||||
}
|
||||
if (invoiceData.Refunds != null)
|
||||
{
|
||||
entity.Refunds = invoiceData.Refunds.OrderBy(c => c.PullPaymentData.StartDate).ToList();
|
||||
}
|
||||
entity.Archived = invoiceData.Archived;
|
||||
entity.UpdateTotals();
|
||||
return entity;
|
||||
}
|
||||
public static InvoiceState GetInvoiceState(this InvoiceData invoiceData)
|
||||
{
|
||||
return new InvoiceState(invoiceData.Status, invoiceData.ExceptionStatus);
|
||||
return new InvoiceState(invoiceData.Status ?? "new", invoiceData.ExceptionStatus);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user