mirror of
https://github.com/bitwarden/server.git
synced 2026-04-12 11:43:51 -05:00
Remove the owner property
This commit is contained in:
@@ -3,7 +3,6 @@ using Bit.Core.Billing.Constants;
|
||||
using Bit.Core.Billing.Models;
|
||||
using Bit.Core.Billing.Models.Sales;
|
||||
using Bit.Core.Billing.Tax.Models;
|
||||
using Bit.Core.Entities;
|
||||
using Bit.Core.Models.Business;
|
||||
|
||||
namespace Bit.Core.Billing.Organizations.Models;
|
||||
@@ -15,19 +14,16 @@ public class OrganizationSale
|
||||
public void Deconstruct(
|
||||
out Organization organization,
|
||||
out CustomerSetup? customerSetup,
|
||||
out SubscriptionSetup subscriptionSetup,
|
||||
out User? owner)
|
||||
out SubscriptionSetup subscriptionSetup)
|
||||
{
|
||||
organization = Organization;
|
||||
customerSetup = CustomerSetup;
|
||||
subscriptionSetup = SubscriptionSetup;
|
||||
owner = Owner;
|
||||
}
|
||||
|
||||
public required Organization Organization { get; init; }
|
||||
public CustomerSetup? CustomerSetup { get; init; }
|
||||
public required SubscriptionSetup SubscriptionSetup { get; init; }
|
||||
public User? Owner { get; init; }
|
||||
|
||||
public static OrganizationSale From(
|
||||
Organization organization,
|
||||
@@ -44,8 +40,7 @@ public class OrganizationSale
|
||||
{
|
||||
Organization = organization,
|
||||
CustomerSetup = customerSetup,
|
||||
SubscriptionSetup = subscriptionSetup,
|
||||
Owner = signup.Owner
|
||||
SubscriptionSetup = subscriptionSetup
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -36,23 +36,19 @@ public class OrganizationBillingService(
|
||||
IStripeAdapter stripeAdapter,
|
||||
ISubscriberService subscriberService,
|
||||
ISubscriptionDiscountRepository subscriptionDiscountRepository,
|
||||
ISubscriptionDiscountService subscriptionDiscountService,
|
||||
ITaxService taxService) : IOrganizationBillingService
|
||||
{
|
||||
public async Task Finalize(OrganizationSale sale)
|
||||
{
|
||||
var (organization, customerSetup, subscriptionSetup, owner) = sale;
|
||||
var (organization, customerSetup, subscriptionSetup) = sale;
|
||||
|
||||
// Validate coupon and only apply if valid. If invalid, proceed without the discount.
|
||||
// Validation happens before purchase to ensure order of operations.
|
||||
// For system-set coupons, we perform basic validation (exists, date range, audience type)
|
||||
// without user-specific eligibility checks.
|
||||
string? validatedCoupon = null;
|
||||
if (!string.IsNullOrWhiteSpace(customerSetup?.Coupon))
|
||||
{
|
||||
// If owner exists, do full validation including user eligibility
|
||||
// If owner is null, validate basic coupon properties only (system-set coupons)
|
||||
var isValid = owner != null
|
||||
? await subscriptionDiscountService.ValidateDiscountForUserAsync(owner, customerSetup.Coupon.Trim(), DiscountAudienceType.UserHasNoPreviousSubscriptions)
|
||||
: await ValidateSystemCouponAsync(customerSetup.Coupon.Trim());
|
||||
var isValid = await ValidateCouponAsync(customerSetup.Coupon.Trim());
|
||||
|
||||
if (isValid)
|
||||
{
|
||||
@@ -558,7 +554,7 @@ public class OrganizationBillingService(
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<bool> ValidateSystemCouponAsync(string stripeCouponId)
|
||||
private async Task<bool> ValidateCouponAsync(string stripeCouponId)
|
||||
{
|
||||
// For system-set organization coupons, validate basic properties:
|
||||
// - Coupon exists in database
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using Bit.Core.AdminConsole.Entities;
|
||||
using Bit.Core.AdminConsole.Entities;
|
||||
using Bit.Core.Billing.Constants;
|
||||
using Bit.Core.Billing.Enums;
|
||||
using Bit.Core.Billing.Models.Sales;
|
||||
@@ -7,7 +7,6 @@ using Bit.Core.Billing.Organizations.Services;
|
||||
using Bit.Core.Billing.Payment.Queries;
|
||||
using Bit.Core.Billing.Pricing;
|
||||
using Bit.Core.Billing.Services;
|
||||
using Bit.Core.Entities;
|
||||
using Bit.Core.Repositories;
|
||||
using Bit.Core.Test.Billing.Mocks;
|
||||
using Bit.Test.Common.AutoFixture;
|
||||
@@ -15,6 +14,7 @@ using Bit.Test.Common.AutoFixture.Attributes;
|
||||
using NSubstitute;
|
||||
using Stripe;
|
||||
using Xunit;
|
||||
using User = Bit.Core.Entities.User;
|
||||
|
||||
namespace Bit.Core.Test.Billing.Services;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user