fix: create plan

This commit is contained in:
Ricardo Carneiro 2025-09-07 21:39:32 -03:00
parent 787fa63f68
commit 79c254905a

View File

@ -78,6 +78,10 @@ public class StripeWebhookController : ControllerBase
await HandleSubscriptionUpdated(stripeEvent);
break;
case "customer.subscription.created":
await HandleSubscriptionCreated(stripeEvent);
break;
default:
_logger.LogInformation($"Unhandled webhook event type: {stripeEvent.Type}");
break;
@ -263,6 +267,63 @@ public class StripeWebhookController : ControllerBase
}
}
private async Task HandleSubscriptionCreated(Event stripeEvent)
{
try
{
if (stripeEvent.Data.Object is Subscription stripeSubscription)
{
_logger.LogInformation($"Subscription created: {stripeSubscription.Id} for customer: {stripeSubscription.CustomerId}");
// Get subscription record from our database
var subscription = await _subscriptionRepository.GetByStripeSubscriptionIdAsync(stripeSubscription.Id);
if (subscription != null)
{
// Update subscription status to active
subscription.Status = "active";
subscription.UpdatedAt = DateTime.UtcNow;
subscription.CurrentPeriodStart = stripeSubscription.CurrentPeriodStart;
subscription.CurrentPeriodEnd = stripeSubscription.CurrentPeriodEnd;
// Update plan type based on Stripe price ID
var priceId = stripeSubscription.Items.Data.FirstOrDefault()?.Price.Id;
if (!string.IsNullOrEmpty(priceId))
{
subscription.PlanType = MapPriceIdToPlanType(priceId);
}
await _subscriptionRepository.UpdateAsync(subscription);
// Activate user pages that were pending payment or trial
var userPages = await _userPageService.GetUserPagesAsync(subscription.UserId);
foreach (var page in userPages.Where(p =>
p.Status == ViewModels.PageStatus.PendingPayment ||
p.Status == ViewModels.PageStatus.Expired))
{
page.Status = ViewModels.PageStatus.Active;
page.UpdatedAt = DateTime.UtcNow;
await _userPageService.UpdatePageAsync(page);
}
_logger.LogInformation($"Activated subscription and {userPages.Count()} pages for user {subscription.UserId}");
}
else
{
_logger.LogWarning($"Subscription not found in database: {stripeSubscription.Id}");
}
}
else
{
_logger.LogWarning($"Unexpected event type on HandleSubscriptionCreated: {stripeEvent.Type}");
}
}
catch (Exception ex)
{
_logger.LogError(ex, "Error handling subscription created event");
throw new Exception("Error handling subscription created event", ex);
}
}
private string MapPriceIdToPlanType(string priceId)
{
// Map Stripe price IDs to plan types