public async Task <InvoiceEntity> UpdateInvoiceMetadata(string invoiceId, string storeId, JObject metadata) { using (var context = _ContextFactory.CreateContext()) { var invoiceData = await GetInvoiceRaw(invoiceId); if (invoiceData == null || (storeId != null && !invoiceData.StoreDataId.Equals(storeId, StringComparison.InvariantCultureIgnoreCase))) { return(null); } var blob = invoiceData.GetBlob(_Networks); blob.Metadata = InvoiceMetadata.FromJObject(metadata); invoiceData.Blob = ToBytes(blob); await context.SaveChangesAsync().ConfigureAwait(false); return(ToEntity(invoiceData)); } }
public async Task <InvoiceEntity> UpdateInvoiceMetadata(string invoiceId, string storeId, JObject metadata) { using var context = _applicationDbContextFactory.CreateContext(); var invoiceData = await GetInvoiceRaw(invoiceId, context); if (invoiceData == null || (storeId != null && !invoiceData.StoreDataId.Equals(storeId, StringComparison.InvariantCultureIgnoreCase))) { return(null); } var blob = invoiceData.GetBlob(_btcPayNetworkProvider); var newMetadata = InvoiceMetadata.FromJObject(metadata); var oldOrderId = blob.Metadata.OrderId; var newOrderId = newMetadata.OrderId; if (newOrderId != oldOrderId) { // OrderId is saved in 2 places: (1) the invoice table and (2) in the metadata field. We are updating both for consistency. invoiceData.OrderId = newOrderId; if (oldOrderId != null && (newOrderId is null || !newOrderId.Equals(oldOrderId, StringComparison.InvariantCulture))) { RemoveFromTextSearch(context, invoiceData, oldOrderId); } if (newOrderId != null) { AddToTextSearch(context, invoiceData, new[] { newOrderId }); } } blob.Metadata = newMetadata; invoiceData.Blob = ToBytes(blob); await context.SaveChangesAsync().ConfigureAwait(false); return(ToEntity(invoiceData)); }