diff --git a/DysonNetwork.Pass/Startup/BroadcastEventHandler.cs b/DysonNetwork.Pass/Startup/BroadcastEventHandler.cs index 5d2f9c4..f6ed967 100644 --- a/DysonNetwork.Pass/Startup/BroadcastEventHandler.cs +++ b/DysonNetwork.Pass/Startup/BroadcastEventHandler.cs @@ -15,19 +15,40 @@ public class BroadcastEventHandler( { await foreach (var msg in nats.SubscribeAsync(PaymentOrderEvent.Type, cancellationToken: stoppingToken)) { + PaymentOrderEvent? evt = null; try { - var evt = JsonSerializer.Deserialize(msg.Data); + evt = JsonSerializer.Deserialize(msg.Data); - if (evt?.ProductIdentifier is null || !evt.ProductIdentifier.StartsWith(SubscriptionType.StellarProgram)) + if (evt?.ProductIdentifier is null || + !evt.ProductIdentifier.StartsWith(SubscriptionType.StellarProgram)) + { continue; - - logger.LogInformation("Stellar program order paid: {OrderId}", evt.OrderId); - + } + + logger.LogInformation("Handling stellar program order: {OrderId}", evt.OrderId); + + await using var scope = serviceProvider.CreateAsyncScope(); + var db = scope.ServiceProvider.GetRequiredService(); + var subscriptions = scope.ServiceProvider.GetRequiredService(); + + var order = await db.PaymentOrders.FindAsync( + [evt.OrderId], + cancellationToken: stoppingToken + ); + if (order is null) + { + logger.LogWarning("Order with ID {OrderId} not found.", evt.OrderId); + continue; + } + + await subscriptions.HandleSubscriptionOrder(order); + + logger.LogInformation("Subscription for order {OrderId} handled successfully.", evt.OrderId); } catch (Exception ex) { - logger.LogError(ex, "Error processing AccountDeleted"); + logger.LogError(ex, "Error processing payment order event for order {OrderId}", evt?.OrderId); } } } diff --git a/DysonNetwork.Pass/Wallet/SubscriptionController.cs b/DysonNetwork.Pass/Wallet/SubscriptionController.cs index f262208..10b98ef 100644 --- a/DysonNetwork.Pass/Wallet/SubscriptionController.cs +++ b/DysonNetwork.Pass/Wallet/SubscriptionController.cs @@ -150,29 +150,6 @@ public class SubscriptionController(SubscriptionService subscriptions, AfdianPay } } - public class SubscriptionOrderRequest - { - [Required] public Guid OrderId { get; set; } - } - - [HttpPost("order/handle")] - [Authorize] - public async Task> HandleSubscriptionOrder([FromBody] SubscriptionOrderRequest request) - { - var order = await db.PaymentOrders.FindAsync(request.OrderId); - if (order is null) return NotFound($"Order with ID {request.OrderId} was not found."); - - try - { - var subscription = await subscriptions.HandleSubscriptionOrder(order); - return subscription; - } - catch (InvalidOperationException ex) - { - return BadRequest(ex.Message); - } - } - public class RestorePurchaseRequest { [Required] public string OrderId { get; set; } = null!;