mirror of
https://github.com/bitwarden/server.git
synced 2025-06-30 15:42:48 -05:00
[AC 1451] Refactor staticstore plans and consuming logic (#3164)
* refactor the plan and create new objects * initial commit * Add new plan types * continue the refactoring by adding new plantypes * changes for plans * Refactoring continues * making changes for plan * Fixing the failing test * Fixing whitespace * Fix some in correct values * Resolve the plan data * rearranging the plan * Make the plan more immutable * Resolve the lint errors * Fix the failing test * Add custom plan * Fix the failing test * Fix the failing test * resolve the failing addons after refactoring * Refactoring * Merge branch 'master' into ac-1451/refactor-staticstore-plans-and-consuming-logic * merge from master * Merge branch 'master' into ac-1451/refactor-staticstore-plans-and-consuming-logic * format whitespace * resolve the conflict * Fix some pr comments * Fixing some of the pr comments * fixing some of the pr comments * Resolve some pr comments * Resolve pr comments * Resolves some pr comments * Resolving some or comments * Resolve a failing test * fix the failing test * Resolving some pr comments * Fix the failing test * resolve pr comment * add a using statement fir a failing test --------- Co-authored-by: Thomas Rittson <trittson@bitwarden.com>
This commit is contained in:
@ -26,12 +26,7 @@ public class OrganizationResponseModel : ResponseModel
|
||||
BusinessCountry = organization.BusinessCountry;
|
||||
BusinessTaxNumber = organization.BusinessTaxNumber;
|
||||
BillingEmail = organization.BillingEmail;
|
||||
Plan = new PlanResponseModel(StaticStore.PasswordManagerPlans.FirstOrDefault(plan => plan.Type == organization.PlanType));
|
||||
var matchingPlan = StaticStore.GetSecretsManagerPlan(organization.PlanType);
|
||||
if (matchingPlan != null)
|
||||
{
|
||||
SecretsManagerPlan = new PlanResponseModel(matchingPlan);
|
||||
}
|
||||
Plan = new PlanResponseModel(StaticStore.GetPlan(organization.PlanType));
|
||||
PlanType = organization.PlanType;
|
||||
Seats = organization.Seats;
|
||||
MaxAutoscaleSeats = organization.MaxAutoscaleSeats;
|
||||
|
@ -21,15 +21,6 @@ public class PlanResponseModel : ResponseModel
|
||||
NameLocalizationKey = plan.NameLocalizationKey;
|
||||
DescriptionLocalizationKey = plan.DescriptionLocalizationKey;
|
||||
CanBeUsedByBusiness = plan.CanBeUsedByBusiness;
|
||||
BaseSeats = plan.BaseSeats;
|
||||
BaseStorageGb = plan.BaseStorageGb;
|
||||
MaxCollections = plan.MaxCollections;
|
||||
MaxUsers = plan.MaxUsers;
|
||||
HasAdditionalSeatsOption = plan.HasAdditionalSeatsOption;
|
||||
HasAdditionalStorageOption = plan.HasAdditionalStorageOption;
|
||||
MaxAdditionalSeats = plan.MaxAdditionalSeats;
|
||||
MaxAdditionalStorage = plan.MaxAdditionalStorage;
|
||||
HasPremiumAccessOption = plan.HasPremiumAccessOption;
|
||||
TrialPeriodDays = plan.TrialPeriodDays;
|
||||
HasSelfHost = plan.HasSelfHost;
|
||||
HasPolicies = plan.HasPolicies;
|
||||
@ -45,22 +36,12 @@ public class PlanResponseModel : ResponseModel
|
||||
DisplaySortOrder = plan.DisplaySortOrder;
|
||||
LegacyYear = plan.LegacyYear;
|
||||
Disabled = plan.Disabled;
|
||||
StripePlanId = plan.StripePlanId;
|
||||
StripeSeatPlanId = plan.StripeSeatPlanId;
|
||||
StripeStoragePlanId = plan.StripeStoragePlanId;
|
||||
BasePrice = plan.BasePrice;
|
||||
SeatPrice = plan.SeatPrice;
|
||||
AdditionalStoragePricePerGb = plan.AdditionalStoragePricePerGb;
|
||||
PremiumAccessOptionPrice = plan.PremiumAccessOptionPrice;
|
||||
if (plan.SecretsManager != null)
|
||||
{
|
||||
SecretsManager = new SecretsManagerPlanFeaturesResponseModel(plan.SecretsManager);
|
||||
}
|
||||
|
||||
AdditionalPricePerServiceAccount = plan.AdditionalPricePerServiceAccount;
|
||||
BaseServiceAccount = plan.BaseServiceAccount;
|
||||
MaxServiceAccounts = plan.MaxServiceAccounts;
|
||||
MaxAdditionalServiceAccounts = plan.MaxAdditionalServiceAccount;
|
||||
HasAdditionalServiceAccountOption = plan.HasAdditionalServiceAccountOption;
|
||||
MaxProjects = plan.MaxProjects;
|
||||
BitwardenProduct = plan.BitwardenProduct;
|
||||
StripeServiceAccountPlanId = plan.StripeServiceAccountPlanId;
|
||||
PasswordManager = new PasswordManagerPlanFeaturesResponseModel(plan.PasswordManager);
|
||||
}
|
||||
|
||||
public PlanType Type { get; set; }
|
||||
@ -70,16 +51,6 @@ public class PlanResponseModel : ResponseModel
|
||||
public string NameLocalizationKey { get; set; }
|
||||
public string DescriptionLocalizationKey { get; set; }
|
||||
public bool CanBeUsedByBusiness { get; set; }
|
||||
public int BaseSeats { get; set; }
|
||||
public short? BaseStorageGb { get; set; }
|
||||
public short? MaxCollections { get; set; }
|
||||
public short? MaxUsers { get; set; }
|
||||
|
||||
public bool HasAdditionalSeatsOption { get; set; }
|
||||
public int? MaxAdditionalSeats { get; set; }
|
||||
public bool HasAdditionalStorageOption { get; set; }
|
||||
public short? MaxAdditionalStorage { get; set; }
|
||||
public bool HasPremiumAccessOption { get; set; }
|
||||
public int? TrialPeriodDays { get; set; }
|
||||
|
||||
public bool HasSelfHost { get; set; }
|
||||
@ -98,21 +69,95 @@ public class PlanResponseModel : ResponseModel
|
||||
public int DisplaySortOrder { get; set; }
|
||||
public int? LegacyYear { get; set; }
|
||||
public bool Disabled { get; set; }
|
||||
public SecretsManagerPlanFeaturesResponseModel SecretsManager { get; protected init; }
|
||||
public PasswordManagerPlanFeaturesResponseModel PasswordManager { get; protected init; }
|
||||
|
||||
public string StripePlanId { get; set; }
|
||||
public string StripeSeatPlanId { get; set; }
|
||||
public string StripeStoragePlanId { get; set; }
|
||||
public string StripePremiumAccessPlanId { get; set; }
|
||||
public decimal BasePrice { get; set; }
|
||||
public decimal SeatPrice { get; set; }
|
||||
public decimal AdditionalStoragePricePerGb { get; set; }
|
||||
public decimal PremiumAccessOptionPrice { get; set; }
|
||||
public string StripeServiceAccountPlanId { get; set; }
|
||||
public decimal? AdditionalPricePerServiceAccount { get; set; }
|
||||
public short? BaseServiceAccount { get; set; }
|
||||
public short? MaxServiceAccounts { get; set; }
|
||||
public short? MaxAdditionalServiceAccounts { get; set; }
|
||||
public bool HasAdditionalServiceAccountOption { get; set; }
|
||||
public short? MaxProjects { get; set; }
|
||||
public BitwardenProductType BitwardenProduct { get; set; }
|
||||
public class SecretsManagerPlanFeaturesResponseModel
|
||||
{
|
||||
public SecretsManagerPlanFeaturesResponseModel(Plan.SecretsManagerPlanFeatures plan)
|
||||
{
|
||||
MaxServiceAccounts = plan.MaxServiceAccounts;
|
||||
AllowServiceAccountsAutoscale = plan is { AllowServiceAccountsAutoscale: true };
|
||||
StripeServiceAccountPlanId = plan.StripeServiceAccountPlanId;
|
||||
AdditionalPricePerServiceAccount = plan.AdditionalPricePerServiceAccount;
|
||||
BaseServiceAccount = plan.BaseServiceAccount;
|
||||
MaxAdditionalServiceAccount = plan.MaxAdditionalServiceAccount;
|
||||
HasAdditionalServiceAccountOption = plan is { HasAdditionalServiceAccountOption: true };
|
||||
StripeSeatPlanId = plan.StripeSeatPlanId;
|
||||
HasAdditionalSeatsOption = plan is { HasAdditionalSeatsOption: true };
|
||||
BasePrice = plan.BasePrice;
|
||||
SeatPrice = plan.SeatPrice;
|
||||
BaseSeats = plan.BaseSeats;
|
||||
MaxSeats = plan.MaxSeats;
|
||||
MaxAdditionalSeats = plan.MaxAdditionalSeats;
|
||||
AllowSeatAutoscale = plan.AllowSeatAutoscale;
|
||||
MaxProjects = plan.MaxProjects;
|
||||
}
|
||||
// Service accounts
|
||||
public short? MaxServiceAccounts { get; init; }
|
||||
public bool AllowServiceAccountsAutoscale { get; init; }
|
||||
public string StripeServiceAccountPlanId { get; init; }
|
||||
public decimal? AdditionalPricePerServiceAccount { get; init; }
|
||||
public short? BaseServiceAccount { get; init; }
|
||||
public short? MaxAdditionalServiceAccount { get; init; }
|
||||
public bool HasAdditionalServiceAccountOption { get; init; }
|
||||
// Seats
|
||||
public string StripeSeatPlanId { get; init; }
|
||||
public bool HasAdditionalSeatsOption { get; init; }
|
||||
public decimal BasePrice { get; init; }
|
||||
public decimal SeatPrice { get; init; }
|
||||
public int BaseSeats { get; init; }
|
||||
public short? MaxSeats { get; init; }
|
||||
public int? MaxAdditionalSeats { get; init; }
|
||||
public bool AllowSeatAutoscale { get; init; }
|
||||
|
||||
// Features
|
||||
public int MaxProjects { get; init; }
|
||||
}
|
||||
|
||||
public record PasswordManagerPlanFeaturesResponseModel
|
||||
{
|
||||
public PasswordManagerPlanFeaturesResponseModel(Plan.PasswordManagerPlanFeatures plan)
|
||||
{
|
||||
StripePlanId = plan.StripePlanId;
|
||||
StripeSeatPlanId = plan.StripeSeatPlanId;
|
||||
BasePrice = plan.BasePrice;
|
||||
SeatPrice = plan.SeatPrice;
|
||||
AllowSeatAutoscale = plan.AllowSeatAutoscale;
|
||||
HasAdditionalSeatsOption = plan.HasAdditionalSeatsOption;
|
||||
MaxAdditionalSeats = plan.MaxAdditionalSeats;
|
||||
BaseSeats = plan.BaseSeats;
|
||||
HasPremiumAccessOption = plan.HasPremiumAccessOption;
|
||||
StripePremiumAccessPlanId = plan.StripePremiumAccessPlanId;
|
||||
PremiumAccessOptionPrice = plan.PremiumAccessOptionPrice;
|
||||
MaxSeats = plan.MaxSeats;
|
||||
BaseStorageGb = plan.BaseStorageGb;
|
||||
HasAdditionalStorageOption = plan.HasAdditionalStorageOption;
|
||||
AdditionalStoragePricePerGb = plan.AdditionalStoragePricePerGb;
|
||||
StripeStoragePlanId = plan.StripeStoragePlanId;
|
||||
MaxAdditionalStorage = plan.MaxAdditionalStorage;
|
||||
MaxCollections = plan.MaxCollections;
|
||||
}
|
||||
// Seats
|
||||
public string StripePlanId { get; init; }
|
||||
public string StripeSeatPlanId { get; init; }
|
||||
public decimal BasePrice { get; init; }
|
||||
public decimal SeatPrice { get; init; }
|
||||
public bool AllowSeatAutoscale { get; init; }
|
||||
public bool HasAdditionalSeatsOption { get; init; }
|
||||
public int? MaxAdditionalSeats { get; init; }
|
||||
public int BaseSeats { get; init; }
|
||||
public bool HasPremiumAccessOption { get; init; }
|
||||
public string StripePremiumAccessPlanId { get; init; }
|
||||
public decimal PremiumAccessOptionPrice { get; init; }
|
||||
public short? MaxSeats { get; init; }
|
||||
// Storage
|
||||
public short? BaseStorageGb { get; init; }
|
||||
public bool HasAdditionalStorageOption { get; init; }
|
||||
public decimal AdditionalStoragePricePerGb { get; init; }
|
||||
public string StripeStoragePlanId { get; init; }
|
||||
public short? MaxAdditionalStorage { get; init; }
|
||||
// Feature
|
||||
public short? MaxCollections { get; init; }
|
||||
}
|
||||
}
|
||||
|
@ -55,7 +55,7 @@ public class ProfileOrganizationResponseModel : ResponseModel
|
||||
FamilySponsorshipAvailable = FamilySponsorshipFriendlyName == null &&
|
||||
StaticStore.GetSponsoredPlan(PlanSponsorshipType.FamiliesForEnterprise)
|
||||
.UsersCanSponsor(organization);
|
||||
PlanProductType = StaticStore.GetPasswordManagerPlan(organization.PlanType).Product;
|
||||
PlanProductType = StaticStore.GetPlan(organization.PlanType).Product;
|
||||
FamilySponsorshipLastSyncDate = organization.FamilySponsorshipLastSyncDate;
|
||||
FamilySponsorshipToDelete = organization.FamilySponsorshipToDelete;
|
||||
FamilySponsorshipValidUntil = organization.FamilySponsorshipValidUntil;
|
||||
|
@ -42,6 +42,6 @@ public class ProfileProviderOrganizationResponseModel : ProfileOrganizationRespo
|
||||
UserId = organization.UserId;
|
||||
ProviderId = organization.ProviderId;
|
||||
ProviderName = organization.ProviderName;
|
||||
PlanProductType = StaticStore.GetPasswordManagerPlan(organization.PlanType).Product;
|
||||
PlanProductType = StaticStore.GetPlan(organization.PlanType).Product;
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,4 @@
|
||||
using Bit.Core.Entities;
|
||||
using Bit.Core.Enums;
|
||||
using Bit.Core.Models.Api;
|
||||
using Bit.Core.Models.Business;
|
||||
using Bit.Core.Utilities;
|
||||
@ -98,7 +97,6 @@ public class BillingSubscription
|
||||
Quantity = item.Quantity;
|
||||
SponsoredSubscriptionItem = item.SponsoredSubscriptionItem;
|
||||
AddonSubscriptionItem = item.AddonSubscriptionItem;
|
||||
BitwardenProduct = item.BitwardenProduct;
|
||||
}
|
||||
|
||||
public string Name { get; set; }
|
||||
@ -107,7 +105,6 @@ public class BillingSubscription
|
||||
public string Interval { get; set; }
|
||||
public bool SponsoredSubscriptionItem { get; set; }
|
||||
public bool AddonSubscriptionItem { get; set; }
|
||||
public BitwardenProductType BitwardenProduct { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user