♻️ Move in-app wallet buy stellar program order confirm logic

This commit is contained in:
2025-09-05 00:20:20 +08:00
parent ddd109c77c
commit 9c078db564
2 changed files with 27 additions and 29 deletions

View File

@@ -15,19 +15,40 @@ public class BroadcastEventHandler(
{
await foreach (var msg in nats.SubscribeAsync<byte[]>(PaymentOrderEvent.Type, cancellationToken: stoppingToken))
{
PaymentOrderEvent? evt = null;
try
{
var evt = JsonSerializer.Deserialize<PaymentOrderEvent>(msg.Data);
evt = JsonSerializer.Deserialize<PaymentOrderEvent>(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<AppDatabase>();
var subscriptions = scope.ServiceProvider.GetRequiredService<SubscriptionService>();
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);
}
}
}

View File

@@ -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<ActionResult<Subscription>> 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!;