mirror of
https://github.com/bitwarden/server
synced 2025-12-28 22:23:30 +00:00
[AC-1423] Add AddonProduct and BitwardenProduct properties to BillingSubscriptionItem (#3037)
* [AC-1423] Add AddonProduct and BitwardenProduct properties to BillingSubscriptionItem - Add a helper method to determine the appropriate addon type based on the subscription items StripeId * [AC-1423] Add helper to StaticStore.cs to find a Plan by StripePlanId * [AC-1423] Use the helper method to set SubscriptionInfo.BitwardenProduct
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using Bit.Core.Entities;
|
||||
using Bit.Core.Enums;
|
||||
using Bit.Core.Models.Api;
|
||||
using Bit.Core.Models.Business;
|
||||
using Bit.Core.Utilities;
|
||||
@@ -82,6 +83,8 @@ public class BillingSubscription
|
||||
Interval = item.Interval;
|
||||
Quantity = item.Quantity;
|
||||
SponsoredSubscriptionItem = item.SponsoredSubscriptionItem;
|
||||
AddonSubscriptionItem = item.AddonSubscriptionItem;
|
||||
BitwardenProduct = item.BitwardenProduct;
|
||||
}
|
||||
|
||||
public string Name { get; set; }
|
||||
@@ -89,6 +92,8 @@ public class BillingSubscription
|
||||
public int Quantity { get; set; }
|
||||
public string Interval { get; set; }
|
||||
public bool SponsoredSubscriptionItem { get; set; }
|
||||
public bool AddonSubscriptionItem { get; set; }
|
||||
public BitwardenProductType BitwardenProduct { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using Stripe;
|
||||
using Bit.Core.Enums;
|
||||
using Stripe;
|
||||
|
||||
namespace Bit.Core.Models.Business;
|
||||
|
||||
@@ -46,12 +47,20 @@ public class SubscriptionInfo
|
||||
Name = item.Plan.Nickname;
|
||||
Amount = item.Plan.Amount.GetValueOrDefault() / 100M;
|
||||
Interval = item.Plan.Interval;
|
||||
AddonSubscriptionItem =
|
||||
Utilities.StaticStore.IsAddonSubscriptionItem(item.Plan.Id);
|
||||
BitwardenProduct =
|
||||
Utilities.StaticStore.GetPlanByStripeId(item.Plan.Id)?.BitwardenProduct ?? BitwardenProductType.PasswordManager;
|
||||
}
|
||||
|
||||
Quantity = (int)item.Quantity;
|
||||
SponsoredSubscriptionItem = Utilities.StaticStore.SponsoredPlans.Any(p => p.StripePlanId == item.Plan.Id);
|
||||
}
|
||||
|
||||
public BitwardenProductType BitwardenProduct { get; set; }
|
||||
|
||||
public bool AddonSubscriptionItem { get; set; }
|
||||
|
||||
public string Name { get; set; }
|
||||
public decimal Amount { get; set; }
|
||||
public int Quantity { get; set; }
|
||||
|
||||
@@ -139,4 +139,53 @@ public class StaticStore
|
||||
|
||||
public static SponsoredPlan GetSponsoredPlan(PlanSponsorshipType planSponsorshipType) =>
|
||||
SponsoredPlans.FirstOrDefault(p => p.PlanSponsorshipType == planSponsorshipType);
|
||||
|
||||
/// <summary>
|
||||
/// Determines if the stripe plan id is an addon item by checking if the provided stripe plan id
|
||||
/// matches either the <see cref="Plan.StripeStoragePlanId"/> or <see cref="Plan.StripeServiceAccountPlanId"/>
|
||||
/// in any <see cref="Plans"/>.
|
||||
/// </summary>
|
||||
/// <param name="stripePlanId"></param>
|
||||
/// <returns>
|
||||
/// True if the stripePlanId is a addon product, false otherwise
|
||||
/// </returns>
|
||||
public static bool IsAddonSubscriptionItem(string stripePlanId)
|
||||
{
|
||||
if (PasswordManagerPlans.Select(p => p.StripeStoragePlanId).Contains(stripePlanId))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (SecretManagerPlans.Select(p => p.StripeServiceAccountPlanId).Contains(stripePlanId))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get a <see cref="Plan"/> by comparing the provided stripeId to the various
|
||||
/// Stripe plan ids within a <see cref="Plan"/>.
|
||||
/// The following <see cref="Plan"/> properties are checked:
|
||||
/// <list type="bullet">
|
||||
/// <item><see cref="Plan.StripePlanId"/></item>
|
||||
/// <item><see cref="Plan.StripeSeatPlanId"/></item>
|
||||
/// <item><see cref="Plan.StripeStoragePlanId"/></item>
|
||||
/// <item><see cref="Plan.StripeServiceAccountPlanId"/></item>
|
||||
/// <item><see cref="Plan.StripePremiumAccessPlanId"/></item>
|
||||
/// </list>
|
||||
/// </summary>
|
||||
/// <param name="stripeId"></param>
|
||||
/// <returns>The plan if a matching stripeId was found, null otherwise</returns>
|
||||
public static Plan GetPlanByStripeId(string stripeId)
|
||||
{
|
||||
return Plans.FirstOrDefault(p =>
|
||||
p.StripePlanId == stripeId ||
|
||||
p.StripeSeatPlanId == stripeId ||
|
||||
p.StripeStoragePlanId == stripeId ||
|
||||
p.StripeServiceAccountPlanId == stripeId ||
|
||||
p.StripePremiumAccessPlanId == stripeId
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user