X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/10ce16c28de952f6533ca3cc9df909269e3d2a53..9cbd6231837df8564953330fc63ce0fb9b9454cc:/src/common/api/common-resource-service.ts diff --git a/src/common/api/common-resource-service.ts b/src/common/api/common-resource-service.ts index 3956fb7390..da5bc33cf7 100644 --- a/src/common/api/common-resource-service.ts +++ b/src/common/api/common-resource-service.ts @@ -3,16 +3,14 @@ // SPDX-License-Identifier: AGPL-3.0 import * as _ from "lodash"; -import { FilterBuilder } from "./filter-builder"; -import { OrderBuilder } from "./order-builder"; import { AxiosInstance, AxiosPromise } from "axios"; -import { Resource } from "../../models/resource"; +import { Resource } from "~/models/resource"; export interface ListArguments { limit?: number; offset?: number; - filters?: FilterBuilder; - order?: OrderBuilder; + filters?: string; + order?: string; select?: string[]; distinct?: boolean; count?: string; @@ -31,6 +29,12 @@ export interface Errors { errorToken: string; } +export enum CommonResourceServiceError { + UNIQUE_VIOLATION = 'UniqueViolation', + UNKNOWN = 'Unknown', + NONE = 'None' +} + export class CommonResourceService { static mapResponseKeys = (response: any): Promise => @@ -68,10 +72,10 @@ export class CommonResourceService { this.resourceType = '/' + resourceType + '/'; } - create(data: Partial) { + create(data?: Partial | any) { return CommonResourceService.defaultResponse( this.serverApi - .post(this.resourceType, CommonResourceService.mapKeys(_.snakeCase)(data))); + .post(this.resourceType, data && CommonResourceService.mapKeys(_.snakeCase)(data))); } delete(uuid: string): Promise { @@ -90,8 +94,8 @@ export class CommonResourceService { const { filters, order, ...other } = args; const params = { ...other, - filters: filters ? filters.serialize() : undefined, - order: order ? order.getOrder() : undefined + filters: filters ? `[${filters}]` : undefined, + order: order ? order : undefined }; return CommonResourceService.defaultResponse( this.serverApi @@ -100,8 +104,25 @@ export class CommonResourceService { })); } - update(uuid: string) { - throw new Error("Not implemented"); + update(uuid: string, data: any) { + return CommonResourceService.defaultResponse( + this.serverApi + .put(this.resourceType + uuid, data)); + } } +export const getCommonResourceServiceError = (errorResponse: any) => { + if ('errors' in errorResponse && 'errorToken' in errorResponse) { + const error = errorResponse.errors.join(''); + switch (true) { + case /UniqueViolation/.test(error): + return CommonResourceServiceError.UNIQUE_VIOLATION; + default: + return CommonResourceServiceError.UNKNOWN; + } + } + return CommonResourceServiceError.NONE; +}; + +