1
0
mirror of https://github.com/bitwarden/browser synced 2025-12-17 08:43:33 +00:00

Refactor GroupService into Core org module (#4112)

* Refactor GroupService into Core org module

- Move Group service folder into Core org folder
- Remove GroupServiceAbstraction
- Rename GroupService in components
- Remove GroupService from list of Org Module providers (use @Injectable decorator instead)

* Import/export SharedModule from SharedOrganizationModule

* Move GroupView to core organization folder

* Fix file names for org collection views

* Cleanup core organization barrel files
This commit is contained in:
Shane Melton
2022-12-13 14:56:19 -08:00
committed by GitHub
parent 5b4e8ff1cd
commit 2442fe146a
20 changed files with 36 additions and 78 deletions

View File

@@ -1,4 +1,3 @@
export * from "./core-organization.module"; export * from "./core-organization.module";
export * from "./services/collection-admin.service"; export * from "./services";
export * from "./views/collection-access-selection-view"; export * from "./views";
export * from "./views/collection-admin-view";

View File

@@ -12,7 +12,7 @@ import {
import { CollectionView } from "@bitwarden/common/models/view/collection.view"; import { CollectionView } from "@bitwarden/common/models/view/collection.view";
import { CoreOrganizationModule } from "../core-organization.module"; import { CoreOrganizationModule } from "../core-organization.module";
import { CollectionAdminView } from "../views/collection-admin-view"; import { CollectionAdminView } from "../views/collection-admin.view";
@Injectable({ providedIn: CoreOrganizationModule }) @Injectable({ providedIn: CoreOrganizationModule })
export class CollectionAdminService { export class CollectionAdminService {

View File

@@ -4,14 +4,15 @@ import { ApiService } from "@bitwarden/common/abstractions/api.service";
import { SelectionReadOnlyRequest } from "@bitwarden/common/models/request/selection-read-only.request"; import { SelectionReadOnlyRequest } from "@bitwarden/common/models/request/selection-read-only.request";
import { ListResponse } from "@bitwarden/common/models/response/list.response"; import { ListResponse } from "@bitwarden/common/models/response/list.response";
import { CoreOrganizationModule } from "../../core-organization.module";
import { GroupView } from "../../views/group.view"; import { GroupView } from "../../views/group.view";
import { GroupRequest, GroupServiceAbstraction } from "../abstractions/group";
import { GroupRequest } from "./requests/group.request";
import { OrganizationGroupBulkRequest } from "./requests/organization-group-bulk.request"; import { OrganizationGroupBulkRequest } from "./requests/organization-group-bulk.request";
import { GroupDetailsResponse, GroupResponse } from "./responses/group.response"; import { GroupDetailsResponse, GroupResponse } from "./responses/group.response";
@Injectable() @Injectable({ providedIn: CoreOrganizationModule })
export class GroupService implements GroupServiceAbstraction { export class GroupService {
constructor(private apiService: ApiService) {} constructor(private apiService: ApiService) {}
async delete(orgId: string, groupId: string): Promise<void> { async delete(orgId: string, groupId: string): Promise<void> {

View File

@@ -0,0 +1,2 @@
export * from "./group/group.service";
export * from "./collection-admin.service";

View File

@@ -1,7 +1,7 @@
import { CollectionView } from "@bitwarden/common/models/view/collection.view"; import { CollectionView } from "@bitwarden/common/models/view/collection.view";
import { CollectionAccessDetailsResponse } from "@bitwarden/common/src/models/response/collection.response"; import { CollectionAccessDetailsResponse } from "@bitwarden/common/src/models/response/collection.response";
import { CollectionAccessSelectionView } from "./collection-access-selection-view"; import { CollectionAccessSelectionView } from "./collection-access-selection.view";
export class CollectionAdminView extends CollectionView { export class CollectionAdminView extends CollectionView {
groups: CollectionAccessSelectionView[] = []; groups: CollectionAccessSelectionView[] = [];

View File

@@ -1,7 +1,8 @@
import { View } from "@bitwarden/common/models/view/view"; import { View } from "@bitwarden/common/models/view/view";
import { GroupDetailsResponse, GroupResponse } from "../services/group/responses/group.response"; import { GroupDetailsResponse, GroupResponse } from "../services/group/responses/group.response";
import { CollectionAccessSelectionView } from "../views/collection-access-selection.view";
import { CollectionAccessSelectionView } from "./collection-access-selection.view";
export class GroupView implements View { export class GroupView implements View {
id: string; id: string;

View File

@@ -0,0 +1,3 @@
export * from "./collection-access-selection.view";
export * from "./collection-admin.view";
export * from "./group.view";

View File

@@ -14,7 +14,7 @@ import { CollectionDetailsResponse } from "@bitwarden/common/models/response/col
import { ErrorResponse } from "@bitwarden/common/models/response/error.response"; import { ErrorResponse } from "@bitwarden/common/models/response/error.response";
import { DialogService } from "@bitwarden/components"; import { DialogService } from "@bitwarden/components";
import { GroupServiceAbstraction } from "../services/abstractions/group"; import { GroupService, GroupView } from "../core";
import { import {
AccessItemType, AccessItemType,
AccessItemValue, AccessItemValue,
@@ -23,7 +23,6 @@ import {
convertToSelectionView, convertToSelectionView,
PermissionMode, PermissionMode,
} from "../shared/components/access-selector"; } from "../shared/components/access-selector";
import { GroupView } from "../views/group.view";
/** /**
* Indices for the available tabs in the dialog * Indices for the available tabs in the dialog
@@ -173,7 +172,7 @@ export class GroupAddEditComponent implements OnInit, OnDestroy {
@Inject(DIALOG_DATA) private params: GroupAddEditDialogParams, @Inject(DIALOG_DATA) private params: GroupAddEditDialogParams,
private dialogRef: DialogRef<GroupAddEditDialogResultType>, private dialogRef: DialogRef<GroupAddEditDialogResultType>,
private apiService: ApiService, private apiService: ApiService,
private groupService: GroupServiceAbstraction, private groupService: GroupService,
private i18nService: I18nService, private i18nService: I18nService,
private collectionService: CollectionService, private collectionService: CollectionService,
private platformUtilsService: PlatformUtilsService, private platformUtilsService: PlatformUtilsService,

View File

@@ -33,8 +33,7 @@ import { ListResponse } from "@bitwarden/common/models/response/list.response";
import { CollectionView } from "@bitwarden/common/models/view/collection.view"; import { CollectionView } from "@bitwarden/common/models/view/collection.view";
import { DialogService } from "@bitwarden/components"; import { DialogService } from "@bitwarden/components";
import { GroupServiceAbstraction } from "../services/abstractions/group"; import { GroupService, GroupView } from "../core";
import { GroupView } from "../views/group.view";
import { import {
GroupAddEditDialogResultType, GroupAddEditDialogResultType,
@@ -124,7 +123,7 @@ export class GroupsComponent implements OnInit, OnDestroy {
constructor( constructor(
private apiService: ApiService, private apiService: ApiService,
private groupApiService: GroupServiceAbstraction, private groupService: GroupService,
private route: ActivatedRoute, private route: ActivatedRoute,
private i18nService: I18nService, private i18nService: I18nService,
private modalService: ModalService, private modalService: ModalService,
@@ -148,7 +147,7 @@ export class GroupsComponent implements OnInit, OnDestroy {
), ),
// groups // groups
this.refreshGroups$.pipe( this.refreshGroups$.pipe(
switchMap(() => this.groupApiService.getAll(this.organizationId)) switchMap(() => this.groupService.getAll(this.organizationId))
), ),
]) ])
), ),
@@ -246,7 +245,7 @@ export class GroupsComponent implements OnInit, OnDestroy {
} }
try { try {
await this.groupApiService.delete(this.organizationId, groupRow.details.id); await this.groupService.delete(this.organizationId, groupRow.details.id);
this.platformUtilsService.showToast( this.platformUtilsService.showToast(
"success", "success",
null, null,
@@ -278,7 +277,7 @@ export class GroupsComponent implements OnInit, OnDestroy {
} }
try { try {
const result = await this.groupApiService.deleteMany( const result = await this.groupService.deleteMany(
this.organizationId, this.organizationId,
groupsToDelete.map((g) => g.details.id) groupsToDelete.map((g) => g.details.id)
); );

View File

@@ -7,8 +7,7 @@ import { PlatformUtilsService } from "@bitwarden/common/abstractions/platformUti
import { Utils } from "@bitwarden/common/misc/utils"; import { Utils } from "@bitwarden/common/misc/utils";
import { OrganizationUserUpdateGroupsRequest } from "@bitwarden/common/models/request/organization-user-update-groups.request"; import { OrganizationUserUpdateGroupsRequest } from "@bitwarden/common/models/request/organization-user-update-groups.request";
import { GroupServiceAbstraction } from "../services/abstractions/group"; import { GroupService, GroupView } from "../core";
import { GroupView } from "../views/group.view";
@Component({ @Component({
selector: "app-user-groups", selector: "app-user-groups",
@@ -26,7 +25,7 @@ export class UserGroupsComponent implements OnInit {
constructor( constructor(
private apiService: ApiService, private apiService: ApiService,
private groupApiService: GroupServiceAbstraction, private groupApiService: GroupService,
private i18nService: I18nService, private i18nService: I18nService,
private platformUtilsService: PlatformUtilsService, private platformUtilsService: PlatformUtilsService,
private logService: LogService private logService: LogService

View File

@@ -1,25 +1,14 @@
import { NgModule } from "@angular/core"; import { NgModule } from "@angular/core";
import { ApiService as ApiServiceAbstraction } from "@bitwarden/common/abstractions/api.service";
import { CoreOrganizationModule } from "./core"; import { CoreOrganizationModule } from "./core";
import { GroupAddEditComponent } from "./manage/group-add-edit.component"; import { GroupAddEditComponent } from "./manage/group-add-edit.component";
import { GroupsComponent } from "./manage/groups.component"; import { GroupsComponent } from "./manage/groups.component";
import { UserGroupsComponent } from "./manage/user-groups.component"; import { UserGroupsComponent } from "./manage/user-groups.component";
import { OrganizationsRoutingModule } from "./organization-routing.module"; import { OrganizationsRoutingModule } from "./organization-routing.module";
import { GroupServiceAbstraction } from "./services/abstractions/group";
import { GroupService } from "./services/group/group.service";
import { SharedOrganizationModule } from "./shared"; import { SharedOrganizationModule } from "./shared";
@NgModule({ @NgModule({
imports: [OrganizationsRoutingModule, SharedOrganizationModule, CoreOrganizationModule], imports: [SharedOrganizationModule, CoreOrganizationModule, OrganizationsRoutingModule],
declarations: [GroupsComponent, GroupAddEditComponent, UserGroupsComponent], declarations: [GroupsComponent, GroupAddEditComponent, UserGroupsComponent],
providers: [
{
provide: GroupServiceAbstraction,
useClass: GroupService,
deps: [ApiServiceAbstraction],
},
],
}) })
export class OrganizationModule {} export class OrganizationModule {}

View File

@@ -1,11 +0,0 @@
import { GroupView } from "../../../views/group.view";
export class GroupServiceAbstraction {
delete: (orgId: string, groupId: string) => Promise<void>;
deleteMany: (orgId: string, groupIds: string[]) => Promise<GroupView[]>;
get: (orgId: string, groupId: string) => Promise<GroupView>;
getAll: (orgId: string) => Promise<GroupView[]>;
save: (group: GroupView) => Promise<GroupView>;
}

View File

@@ -1,2 +0,0 @@
export * from "./group.service.abstraction";
export * from "./requests/group.request";

View File

@@ -12,9 +12,12 @@ import { OrganizationUserUserDetailsResponse } from "@bitwarden/common/src/model
import { CollectionView } from "@bitwarden/common/src/models/view/collection.view"; import { CollectionView } from "@bitwarden/common/src/models/view/collection.view";
import { BitValidators, DialogService } from "@bitwarden/components"; import { BitValidators, DialogService } from "@bitwarden/components";
import { CollectionAdminService, CollectionAdminView } from "../../../core"; import {
import { GroupServiceAbstraction } from "../../../services/abstractions/group"; CollectionAdminService,
import { GroupView } from "../../../views/group.view"; CollectionAdminView,
GroupService,
GroupView,
} from "../../../core";
import { import {
AccessItemType, AccessItemType,
AccessItemValue, AccessItemValue,
@@ -62,7 +65,7 @@ export class CollectionDialogComponent implements OnInit, OnDestroy {
private dialogRef: DialogRef<CollectionDialogResult>, private dialogRef: DialogRef<CollectionDialogResult>,
private apiService: ApiService, private apiService: ApiService,
private organizationService: OrganizationService, private organizationService: OrganizationService,
private groupService: GroupServiceAbstraction, private groupService: GroupService,
private collectionService: CollectionAdminService, private collectionService: CollectionAdminService,
private i18nService: I18nService, private i18nService: I18nService,
private platformUtilsService: PlatformUtilsService private platformUtilsService: PlatformUtilsService

View File

@@ -18,9 +18,9 @@ import {
CollectionAccessSelectionView, CollectionAccessSelectionView,
CollectionAdminService, CollectionAdminService,
CollectionAdminView, CollectionAdminView,
GroupService,
GroupView,
} from "../../../core"; } from "../../../core";
import { GroupServiceAbstraction } from "../../../services/abstractions/group/group.service.abstraction";
import { GroupView } from "../../../views/group.view";
import { AccessSelectorModule } from "../access-selector"; import { AccessSelectorModule } from "../access-selector";
import { CollectionDialogComponent, CollectionDialogParams } from "./collection-dialog.component"; import { CollectionDialogComponent, CollectionDialogParams } from "./collection-dialog.component";
@@ -96,8 +96,8 @@ function providers(data: ProviderData) {
} as Partial<OrganizationService>, } as Partial<OrganizationService>,
}, },
{ {
provide: GroupServiceAbstraction, provide: GroupService,
useValue: { getAll: () => Promise.resolve(data.groups) } as Partial<GroupServiceAbstraction>, useValue: { getAll: () => Promise.resolve(data.groups) } as Partial<GroupService>,
}, },
{ {
provide: ApiService, provide: ApiService,

View File

@@ -1,24 +0,0 @@
import { View } from "@bitwarden/common/models/view/view";
interface SelectionResponseLike {
id: string;
readOnly: boolean;
hidePasswords: boolean;
}
export class CollectionAccessSelectionView extends View {
id: string;
readOnly: boolean;
hidePasswords: boolean;
constructor(source?: SelectionResponseLike) {
super();
if (source == undefined) {
return;
}
this.id = source.id;
this.readOnly = source.readOnly;
this.hidePasswords = source.hidePasswords;
}
}