1cd42fb523945c3a6a5918b24b0474780dabe908
[arvados-workbench2.git] / src / services / ancestors-service / ancestors-service.ts
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import { GroupsService } from "~/services/groups-service/groups-service";
6 import { UserService } from '../user-service/user-service';
7 import { GroupResource } from '~/models/group';
8 import { UserResource } from '~/models/user';
9 import { extractUuidObjectType, ResourceObjectType } from "~/models/resource";
10
11 export class AncestorService {
12     constructor(
13         private groupsService: GroupsService,
14         private userService: UserService
15     ) { }
16
17     async ancestors(uuid: string, rootUuid: string): Promise<Array<UserResource | GroupResource>> {
18         const service = this.getService(extractUuidObjectType(uuid));
19         if (service) {
20             const resource = await service.get(uuid);
21             if (uuid === rootUuid) {
22                 return [resource];
23             } else {
24                 return [
25                     ...await this.ancestors(resource.ownerUuid, rootUuid),
26                     resource
27                 ];
28             }
29         } else {
30             return [];
31         }
32     }
33
34     private getService = (objectType?: string) => {
35         switch (objectType) {
36             case ResourceObjectType.GROUP:
37                 return this.groupsService;
38             case ResourceObjectType.USER:
39                 return this.userService;
40             default:
41                 return undefined;
42         }
43     }
44 }