X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/f0a64666816383d2641d5fa7ea22019441ac4464..952bcc8f3ef686a2463931bc3f88457398163df7:/src/services/common-service/common-resource-service.ts diff --git a/src/services/common-service/common-resource-service.ts b/src/services/common-service/common-resource-service.ts index d29ea156..c6306779 100644 --- a/src/services/common-service/common-resource-service.ts +++ b/src/services/common-service/common-resource-service.ts @@ -3,9 +3,10 @@ // SPDX-License-Identifier: AGPL-3.0 import { AxiosInstance } from "axios"; -import { Resource } from "src/models/resource"; -import { ApiActions } from "~/services/api/api-actions"; -import { CommonService } from "~/services/common-service/common-service"; +import { snakeCase } from "lodash"; +import { Resource } from "models/resource"; +import { ApiActions } from "services/api/api-actions"; +import { CommonService } from "services/common-service/common-service"; export enum CommonResourceServiceError { UNIQUE_NAME_VIOLATION = 'UniqueNameViolation', @@ -17,8 +18,37 @@ export enum CommonResourceServiceError { } export class CommonResourceService extends CommonService { - constructor(serverApi: AxiosInstance, resourceType: string, actions: ApiActions) { - super(serverApi, resourceType, actions); + constructor(serverApi: AxiosInstance, resourceType: string, actions: ApiActions, readOnlyFields: string[] = []) { + super(serverApi, resourceType, actions, readOnlyFields.concat([ + 'uuid', + 'etag', + 'kind' + ])); + } + + create(data?: Partial) { + let payload: any; + if (data !== undefined) { + this.readOnlyFields.forEach( field => delete data[field] ); + payload = { + [this.resourceType.slice(0, -1)]: CommonService.mapKeys(snakeCase)(data), + }; + } + return super.create(payload); + } + + update(uuid: string, data: Partial, select?: string[]) { + let payload: any; + if (data !== undefined) { + this.readOnlyFields.forEach( field => delete data[field] ); + payload = { + [this.resourceType.slice(0, -1)]: CommonService.mapKeys(snakeCase)(data), + }; + if (select !== undefined && select.length > 0) { + payload.select = ['uuid', ...select.map(field => snakeCase(field))]; + }; + } + return super.update(uuid, payload); } }