mirror of
https://github.com/btcpayserver/btcpayserver.git
synced 2025-02-22 22:25:28 +01:00
* Mark Payouts as Paid This PR allows users to mark payouts as paid manually through the UI and through the API. It also sets up the payout proof system to be able store a manual proof that will in a later PR allow you to specify a proof of payment (link or text) * add docs, test and greenfield client * remove extra docs stuff * Update BTCPayServer.Tests/GreenfieldAPITests.cs Co-authored-by: britttttk <39231115+britttttk@users.noreply.github.com> * clean up pull payment/payouts fetch code * Ensure payoutis are retrieved with pull payment Co-authored-by: britttttk <39231115+britttttk@users.noreply.github.com>
54 lines
2.3 KiB
C#
54 lines
2.3 KiB
C#
using System;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using BTCPayServer.Client.Models;
|
|
using BTCPayServer.Payments;
|
|
using BTCPayServer.Services;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Newtonsoft.Json;
|
|
|
|
namespace BTCPayServer.Data
|
|
{
|
|
public static class PayoutExtensions
|
|
{
|
|
public static async Task<PayoutData> GetPayout(this DbSet<PayoutData> payouts, string payoutId, string storeId, bool includePullPayment = false, bool includeStore = false)
|
|
{
|
|
IQueryable<PayoutData> query = payouts;
|
|
if (includePullPayment)
|
|
query = query.Include(p => p.PullPaymentData);
|
|
if (includeStore)
|
|
query = query.Include(p => p.PullPaymentData.StoreData);
|
|
var payout = await query.Where(p => p.Id == payoutId &&
|
|
p.PullPaymentData.StoreId == storeId).FirstOrDefaultAsync();
|
|
if (payout is null)
|
|
return null;
|
|
return payout;
|
|
}
|
|
|
|
public static PaymentMethodId GetPaymentMethodId(this PayoutData data)
|
|
{
|
|
return PaymentMethodId.Parse(data.PaymentMethodId);
|
|
}
|
|
public static PayoutBlob GetBlob(this PayoutData data, BTCPayNetworkJsonSerializerSettings serializers)
|
|
{
|
|
return JsonConvert.DeserializeObject<PayoutBlob>(Encoding.UTF8.GetString(data.Blob), serializers.GetSerializer(data.GetPaymentMethodId().CryptoCode));
|
|
}
|
|
public static void SetBlob(this PayoutData data, PayoutBlob blob, BTCPayNetworkJsonSerializerSettings serializers)
|
|
{
|
|
data.Blob = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(blob, serializers.GetSerializer(data.GetPaymentMethodId().CryptoCode)));
|
|
}
|
|
|
|
public static void SetProofBlob(this PayoutData data, ManualPayoutProof blob)
|
|
{
|
|
if(blob is null)
|
|
return;
|
|
var bytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(blob));
|
|
// We only update the property if the bytes actually changed, this prevent from hammering the DB too much
|
|
if (data.Proof is null || bytes.Length != data.Proof.Length || !bytes.SequenceEqual(data.Proof))
|
|
{
|
|
data.Proof = bytes;
|
|
}
|
|
}
|
|
}
|
|
}
|