btcpayserver/BTCPayServer/Services/Notifications/Blobs/PayoutNotification.cs
2024-07-02 17:55:54 +09:00

61 lines
2.4 KiB
C#

using System;
using BTCPayServer.Abstractions.Contracts;
using BTCPayServer.Client.Models;
using BTCPayServer.Configuration;
using BTCPayServer.Controllers;
using ExchangeSharp;
using Microsoft.AspNetCore.Routing;
namespace BTCPayServer.Services.Notifications.Blobs
{
public class PayoutNotification : BaseNotification
{
private const string TYPE = "payout";
internal class Handler : NotificationHandler<PayoutNotification>
{
private readonly LinkGenerator _linkGenerator;
private readonly BTCPayServerOptions _options;
public Handler(LinkGenerator linkGenerator, BTCPayServerOptions options)
{
_linkGenerator = linkGenerator;
_options = options;
}
public override string NotificationType => TYPE;
public override (string identifier, string name)[] Meta
{
get
{
return new (string identifier, string name)[] { (TYPE, "Payouts") };
}
}
protected override void FillViewModel(PayoutNotification notification, NotificationViewModel vm)
{
vm.Identifier = notification.Identifier;
vm.Type = notification.NotificationType;
vm.StoreId = notification.StoreId;
vm.Body = (notification.Status ?? PayoutState.AwaitingApproval) switch
{
PayoutState.AwaitingApproval => "A new payout is awaiting for approval",
PayoutState.AwaitingPayment => "A new payout is approved and awaiting payment",
_ => throw new ArgumentOutOfRangeException()
};
vm.ActionLink = _linkGenerator.GetPathByAction(nameof(UIStorePullPaymentsController.Payouts),
"UIStorePullPayments",
new { storeId = notification.StoreId, payoutMethodId = notification.PaymentMethod }, _options.RootPath);
}
}
public string PayoutId { get; set; }
public string StoreId { get; set; }
public string PaymentMethod { get; set; }
public string Currency { get; set; }
public override string Identifier => Status is null ? TYPE : $"{TYPE}_{Status.ToStringLowerInvariant()}";
public override string NotificationType => TYPE;
public PayoutState? Status { get; set; }
}
}