X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/d048e918a6899aac404179690730d29ce26c606a..f9dde5c781766b8be71d43d0f031c201a0edcfbb:/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 09e034f5..471c32fa 100644 --- a/src/services/common-service/common-resource-service.ts +++ b/src/services/common-service/common-resource-service.ts @@ -3,115 +3,26 @@ // SPDX-License-Identifier: AGPL-3.0 import * as _ from "lodash"; -import { AxiosInstance, AxiosPromise } from "axios"; +import { AxiosInstance } from "axios"; import { Resource } from "src/models/resource"; - -export interface ListArguments { - limit?: number; - offset?: number; - filters?: string; - order?: string; - select?: string[]; - distinct?: boolean; - count?: string; -} - -export interface ListResults { - kind: string; - offset: number; - limit: number; - items: T[]; - itemsAvailable: number; -} - -export interface Errors { - errors: string[]; - errorToken: string; -} +import { ApiActions } from "~/services/api/api-actions"; +import { CommonService } from "~/services/common-service/common-service"; export enum CommonResourceServiceError { UNIQUE_VIOLATION = 'UniqueViolation', OWNERSHIP_CYCLE = 'OwnershipCycle', MODIFYING_CONTAINER_REQUEST_FINAL_STATE = 'ModifyingContainerRequestFinalState', + NAME_HAS_ALREADY_BEEN_TAKEN = 'NameHasAlreadyBeenTaken', UNKNOWN = 'Unknown', NONE = 'None' } -export class CommonResourceService { - - static mapResponseKeys = (response: { data: any }): Promise => - CommonResourceService.mapKeys(_.camelCase)(response.data) - - static mapKeys = (mapFn: (key: string) => string) => - (value: any): any => { - switch (true) { - case _.isPlainObject(value): - return Object - .keys(value) - .map(key => [key, mapFn(key)]) - .reduce((newValue, [key, newKey]) => ({ - ...newValue, - [newKey]: CommonResourceService.mapKeys(mapFn)(value[key]) - }), {}); - case _.isArray(value): - return value.map(CommonResourceService.mapKeys(mapFn)); - default: - return value; - } - } - - static defaultResponse(promise: AxiosPromise): Promise { - return promise - .then(CommonResourceService.mapResponseKeys) - .catch(({ response }) => Promise.reject(CommonResourceService.mapResponseKeys(response))); - } - - protected serverApi: AxiosInstance; - protected resourceType: string; - - constructor(serverApi: AxiosInstance, resourceType: string) { - this.serverApi = serverApi; - this.resourceType = '/' + resourceType + '/'; - } - - create(data?: Partial | any) { - return CommonResourceService.defaultResponse( - this.serverApi - .post(this.resourceType, data && CommonResourceService.mapKeys(_.snakeCase)(data))); - } - - delete(uuid: string): Promise { - return CommonResourceService.defaultResponse( - this.serverApi - .delete(this.resourceType + uuid)); - } - - get(uuid: string) { - return CommonResourceService.defaultResponse( - this.serverApi - .get(this.resourceType + uuid)); - } - - list(args: ListArguments = {}): Promise> { - const { filters, order, ...other } = args; - const params = { - ...other, - filters: filters ? `[${filters}]` : undefined, - order: order ? order : undefined - }; - return CommonResourceService.defaultResponse( - this.serverApi - .get(this.resourceType, { - params: CommonResourceService.mapKeys(_.snakeCase)(params) - })); - } - - update(uuid: string, data: Partial) { - return CommonResourceService.defaultResponse( - this.serverApi - .put(this.resourceType + uuid, data && CommonResourceService.mapKeys(_.snakeCase)(data))); +export class CommonResourceService extends CommonService { + constructor(serverApi: AxiosInstance, resourceType: string, actions: ApiActions) { + super(serverApi, resourceType, actions); } + } export const getCommonResourceServiceError = (errorResponse: any) => { @@ -124,6 +35,8 @@ export const getCommonResourceServiceError = (errorResponse: any) => { return CommonResourceServiceError.OWNERSHIP_CYCLE; case /Mounts cannot be modified in state 'Final'/.test(error): return CommonResourceServiceError.MODIFYING_CONTAINER_REQUEST_FINAL_STATE; + case /Name has already been taken/.test(error): + return CommonResourceServiceError.NAME_HAS_ALREADY_BEEN_TAKEN; default: return CommonResourceServiceError.UNKNOWN; }