5c686aae67fd5db06251071bacbc591b5c5f0f51
[arvados-workbench2.git] / src / services / project-service / project-service.ts
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import { GroupsService } from "../groups-service/groups-service";
6 import { ProjectResource } from "~/models/project";
7 import { GroupClass } from "~/models/group";
8 import { ListArguments } from "~/services/common-service/common-service";
9 import { FilterBuilder, joinFilters } from "~/services/api/filter-builder";
10 import { TrashableResourceService } from '~/services/common-service/trashable-resource-service';
11 import { snakeCase } from 'lodash';
12 export class ProjectService extends GroupsService<ProjectResource> {
13
14     create(data: Partial<ProjectResource>) {
15         const projectData = { ...data, groupClass: GroupClass.PROJECT };
16         return super.create(projectData);
17     }
18
19     update(uuid: string, data: Partial<ProjectResource>) {
20         if (uuid && data && data.properties) {
21             const { properties } = data;
22             const mappedData = {
23                 ...TrashableResourceService.mapKeys(snakeCase)(data),
24                 properties,
25             };
26             return TrashableResourceService
27                 .defaultResponse(
28                     this.serverApi
29                         .put<ProjectResource>(this.resourceType + uuid, mappedData),
30                     this.actions,
31                     false
32                 );
33         }
34         return TrashableResourceService
35             .defaultResponse(
36                 this.serverApi
37                     .put<ProjectResource>(this.resourceType + uuid, data && TrashableResourceService.mapKeys(snakeCase)(data)),
38                 this.actions
39             );
40     }
41
42     list(args: ListArguments = {}) {
43         return super.list({
44             ...args,
45             filters: joinFilters(
46                 args.filters,
47                 new FilterBuilder()
48                     .addEqual("groupClass", GroupClass.PROJECT)
49                     .getFilters()
50             )
51         });
52     }
53 }