mirror of
https://github.com/bitwarden/server.git
synced 2025-03-13 13:39:35 +01:00
[PM-18436] Only cancel subscriptions when creating or renewing (#5423)
* Only cancel subscriptions during creation or cycle renewal * Resolved possible null reference warning * Inverted conitional to reduce nesting
This commit is contained in:
parent
0b6f0d9fe8
commit
5bbd905401
@ -23,9 +23,9 @@ public class SubscriptionCancellationJob(
|
|||||||
}
|
}
|
||||||
|
|
||||||
var subscription = await stripeFacade.GetSubscription(subscriptionId);
|
var subscription = await stripeFacade.GetSubscription(subscriptionId);
|
||||||
if (subscription?.Status != "unpaid")
|
if (subscription?.Status != "unpaid" ||
|
||||||
|
subscription.LatestInvoice?.BillingReason is not ("subscription_cycle" or "subscription_create"))
|
||||||
{
|
{
|
||||||
// Subscription is no longer unpaid, skip cancellation
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ public class SubscriptionUpdatedHandler : ISubscriptionUpdatedHandler
|
|||||||
/// <param name="parsedEvent"></param>
|
/// <param name="parsedEvent"></param>
|
||||||
public async Task HandleAsync(Event parsedEvent)
|
public async Task HandleAsync(Event parsedEvent)
|
||||||
{
|
{
|
||||||
var subscription = await _stripeEventService.GetSubscription(parsedEvent, true, ["customer", "discounts"]);
|
var subscription = await _stripeEventService.GetSubscription(parsedEvent, true, ["customer", "discounts", "latest_invoice"]);
|
||||||
var (organizationId, userId, providerId) = _stripeEventUtilityService.GetIdsFromMetadata(subscription.Metadata);
|
var (organizationId, userId, providerId) = _stripeEventUtilityService.GetIdsFromMetadata(subscription.Metadata);
|
||||||
|
|
||||||
switch (subscription.Status)
|
switch (subscription.Status)
|
||||||
@ -68,7 +68,8 @@ public class SubscriptionUpdatedHandler : ISubscriptionUpdatedHandler
|
|||||||
when organizationId.HasValue:
|
when organizationId.HasValue:
|
||||||
{
|
{
|
||||||
await _organizationService.DisableAsync(organizationId.Value, subscription.CurrentPeriodEnd);
|
await _organizationService.DisableAsync(organizationId.Value, subscription.CurrentPeriodEnd);
|
||||||
if (subscription.Status == StripeSubscriptionStatus.Unpaid)
|
if (subscription.Status == StripeSubscriptionStatus.Unpaid &&
|
||||||
|
subscription.LatestInvoice is { BillingReason: "subscription_cycle" or "subscription_create" })
|
||||||
{
|
{
|
||||||
await ScheduleCancellationJobAsync(subscription.Id, organizationId.Value);
|
await ScheduleCancellationJobAsync(subscription.Id, organizationId.Value);
|
||||||
}
|
}
|
||||||
@ -96,7 +97,10 @@ public class SubscriptionUpdatedHandler : ISubscriptionUpdatedHandler
|
|||||||
{
|
{
|
||||||
await _organizationEnableCommand.EnableAsync(organizationId.Value);
|
await _organizationEnableCommand.EnableAsync(organizationId.Value);
|
||||||
var organization = await _organizationRepository.GetByIdAsync(organizationId.Value);
|
var organization = await _organizationRepository.GetByIdAsync(organizationId.Value);
|
||||||
|
if (organization != null)
|
||||||
|
{
|
||||||
await _pushNotificationService.PushSyncOrganizationStatusAsync(organization);
|
await _pushNotificationService.PushSyncOrganizationStatusAsync(organization);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case StripeSubscriptionStatus.Active:
|
case StripeSubscriptionStatus.Active:
|
||||||
@ -204,9 +208,11 @@ public class SubscriptionUpdatedHandler : ISubscriptionUpdatedHandler
|
|||||||
private async Task ScheduleCancellationJobAsync(string subscriptionId, Guid organizationId)
|
private async Task ScheduleCancellationJobAsync(string subscriptionId, Guid organizationId)
|
||||||
{
|
{
|
||||||
var isResellerManagedOrgAlertEnabled = _featureService.IsEnabled(FeatureFlagKeys.ResellerManagedOrgAlert);
|
var isResellerManagedOrgAlertEnabled = _featureService.IsEnabled(FeatureFlagKeys.ResellerManagedOrgAlert);
|
||||||
|
if (!isResellerManagedOrgAlertEnabled)
|
||||||
if (isResellerManagedOrgAlertEnabled)
|
|
||||||
{
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var scheduler = await _schedulerFactory.GetScheduler();
|
var scheduler = await _schedulerFactory.GetScheduler();
|
||||||
|
|
||||||
var job = JobBuilder.Create<SubscriptionCancellationJob>()
|
var job = JobBuilder.Create<SubscriptionCancellationJob>()
|
||||||
@ -222,5 +228,4 @@ public class SubscriptionUpdatedHandler : ISubscriptionUpdatedHandler
|
|||||||
|
|
||||||
await scheduler.ScheduleJob(job, trigger);
|
await scheduler.ScheduleJob(job, trigger);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user