1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-11 22:03:36 +00:00

[PM-14461] Update organization state after subscription update (#12222)

* Update organization state after subscription update

* QA: Fix SM trial seat adjustment
This commit is contained in:
Alex Morask
2025-01-02 14:37:09 -06:00
committed by GitHub
parent af4311fa21
commit 15cc4ff1eb
4 changed files with 40 additions and 10 deletions

View File

@@ -5,6 +5,8 @@ import { FormBuilder, Validators } from "@angular/forms";
import { Subject, takeUntil } from "rxjs"; import { Subject, takeUntil } from "rxjs";
import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction"; import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction";
import { InternalOrganizationServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
import { OrganizationData } from "@bitwarden/common/admin-console/models/data/organization.data";
import { OrganizationSubscriptionUpdateRequest } from "@bitwarden/common/billing/models/request/organization-subscription-update.request"; import { OrganizationSubscriptionUpdateRequest } from "@bitwarden/common/billing/models/request/organization-subscription-update.request";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { ToastService } from "@bitwarden/components"; import { ToastService } from "@bitwarden/components";
@@ -34,6 +36,7 @@ export class AdjustSubscription implements OnInit, OnDestroy {
private organizationApiService: OrganizationApiServiceAbstraction, private organizationApiService: OrganizationApiServiceAbstraction,
private formBuilder: FormBuilder, private formBuilder: FormBuilder,
private toastService: ToastService, private toastService: ToastService,
private internalOrganizationService: InternalOrganizationServiceAbstraction,
) {} ) {}
ngOnInit() { ngOnInit() {
@@ -64,7 +67,20 @@ export class AdjustSubscription implements OnInit, OnDestroy {
this.additionalSeatCount, this.additionalSeatCount,
this.adjustSubscriptionForm.value.newMaxSeats, this.adjustSubscriptionForm.value.newMaxSeats,
); );
await this.organizationApiService.updatePasswordManagerSeats(this.organizationId, request);
const response = await this.organizationApiService.updatePasswordManagerSeats(
this.organizationId,
request,
);
const organization = await this.internalOrganizationService.get(this.organizationId);
const organizationData = new OrganizationData(response, {
isMember: organization.isMember,
isProviderUser: organization.isProviderUser,
});
await this.internalOrganizationService.upsert(organizationData);
this.toastService.showToast({ this.toastService.showToast({
variant: "success", variant: "success",

View File

@@ -5,6 +5,8 @@ import { FormBuilder, Validators } from "@angular/forms";
import { Subject, takeUntil } from "rxjs"; import { Subject, takeUntil } from "rxjs";
import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction"; import { OrganizationApiServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization-api.service.abstraction";
import { InternalOrganizationServiceAbstraction } from "@bitwarden/common/admin-console/abstractions/organization/organization.service.abstraction";
import { OrganizationData } from "@bitwarden/common/admin-console/models/data/organization.data";
import { OrganizationSmSubscriptionUpdateRequest } from "@bitwarden/common/billing/models/request/organization-sm-subscription-update.request"; import { OrganizationSmSubscriptionUpdateRequest } from "@bitwarden/common/billing/models/request/organization-sm-subscription-update.request";
import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service"; import { I18nService } from "@bitwarden/common/platform/abstractions/i18n.service";
import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service"; import { PlatformUtilsService } from "@bitwarden/common/platform/abstractions/platform-utils.service";
@@ -104,6 +106,7 @@ export class SecretsManagerAdjustSubscriptionComponent implements OnInit, OnDest
private i18nService: I18nService, private i18nService: I18nService,
private platformUtilsService: PlatformUtilsService, private platformUtilsService: PlatformUtilsService,
private toastService: ToastService, private toastService: ToastService,
private internalOrganizationService: InternalOrganizationServiceAbstraction,
) {} ) {}
ngOnInit() { ngOnInit() {
@@ -157,11 +160,20 @@ export class SecretsManagerAdjustSubscriptionComponent implements OnInit, OnDest
? this.formGroup.value.maxAutoscaleServiceAccounts ? this.formGroup.value.maxAutoscaleServiceAccounts
: null; : null;
await this.organizationApiService.updateSecretsManagerSubscription( const response = await this.organizationApiService.updateSecretsManagerSubscription(
this.organizationId, this.organizationId,
request, request,
); );
const organization = await this.internalOrganizationService.get(this.organizationId);
const organizationData = new OrganizationData(response, {
isMember: organization.isMember,
isProviderUser: organization.isProviderUser,
});
await this.internalOrganizationService.upsert(organizationData);
this.toastService.showToast({ this.toastService.showToast({
variant: "success", variant: "success",
title: null, title: null,

View File

@@ -53,11 +53,11 @@ export class OrganizationApiServiceAbstraction {
updatePasswordManagerSeats: ( updatePasswordManagerSeats: (
id: string, id: string,
request: OrganizationSubscriptionUpdateRequest, request: OrganizationSubscriptionUpdateRequest,
) => Promise<void>; ) => Promise<ProfileOrganizationResponse>;
updateSecretsManagerSubscription: ( updateSecretsManagerSubscription: (
id: string, id: string,
request: OrganizationSmSubscriptionUpdateRequest, request: OrganizationSmSubscriptionUpdateRequest,
) => Promise<void>; ) => Promise<ProfileOrganizationResponse>;
updateSeats: (id: string, request: SeatRequest) => Promise<PaymentResponse>; updateSeats: (id: string, request: SeatRequest) => Promise<PaymentResponse>;
updateStorage: (id: string, request: StorageRequest) => Promise<PaymentResponse>; updateStorage: (id: string, request: StorageRequest) => Promise<PaymentResponse>;
verifyBank: (id: string, request: VerifyBankRequest) => Promise<void>; verifyBank: (id: string, request: VerifyBankRequest) => Promise<void>;

View File

@@ -161,27 +161,29 @@ export class OrganizationApiService implements OrganizationApiServiceAbstraction
async updatePasswordManagerSeats( async updatePasswordManagerSeats(
id: string, id: string,
request: OrganizationSubscriptionUpdateRequest, request: OrganizationSubscriptionUpdateRequest,
): Promise<void> { ): Promise<ProfileOrganizationResponse> {
return this.apiService.send( const r = await this.apiService.send(
"POST", "POST",
"/organizations/" + id + "/subscription", "/organizations/" + id + "/subscription",
request, request,
true, true,
false, true,
); );
return new ProfileOrganizationResponse(r);
} }
async updateSecretsManagerSubscription( async updateSecretsManagerSubscription(
id: string, id: string,
request: OrganizationSmSubscriptionUpdateRequest, request: OrganizationSmSubscriptionUpdateRequest,
): Promise<void> { ): Promise<ProfileOrganizationResponse> {
return this.apiService.send( const r = await this.apiService.send(
"POST", "POST",
"/organizations/" + id + "/sm-subscription", "/organizations/" + id + "/sm-subscription",
request, request,
true, true,
false, true,
); );
return new ProfileOrganizationResponse(r);
} }
async updateSeats(id: string, request: SeatRequest): Promise<PaymentResponse> { async updateSeats(id: string, request: SeatRequest): Promise<PaymentResponse> {