Afdian as payment handler

This commit is contained in:
2025-06-23 00:29:37 +08:00
parent a23338c263
commit be0b48cfd9
8 changed files with 586 additions and 9 deletions

View File

@ -3,12 +3,13 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using NodaTime;
using System.ComponentModel.DataAnnotations;
using DysonNetwork.Sphere.Wallet.PaymentHandlers;
namespace DysonNetwork.Sphere.Wallet;
[ApiController]
[Route("/subscriptions")]
public class SubscriptionController(SubscriptionService subscriptions, AppDatabase db) : ControllerBase
public class SubscriptionController(SubscriptionService subscriptions, AfdianPaymentHandler afdian, AppDatabase db) : ControllerBase
{
[HttpGet]
[Authorize]
@ -172,4 +173,31 @@ public class SubscriptionController(SubscriptionService subscriptions, AppDataba
return BadRequest(ex.Message);
}
}
public class RestorePurchaseRequest
{
[Required] public string OrderId { get; set; } = null!;
}
[HttpPost("order/restore/afdian")]
public async Task<IActionResult> RestorePurchaseFromAfdian([FromBody] RestorePurchaseRequest request)
{
var order = await afdian.GetOrderAsync(request.OrderId);
if (order is null) return NotFound($"Order with ID {request.OrderId} was not found.");
var subscription = await subscriptions.CreateSubscriptionFromOrder(order);
return Ok(subscription);
}
[HttpPost("order/handle/afdian")]
public async Task<IActionResult> AfdianWebhook()
{
var response = await afdian.HandleWebhook(Request, async (webhookData) =>
{
var order = webhookData.Order;
await subscriptions.CreateSubscriptionFromOrder(order);
});
return Ok(response);
}
}