//
// SPDX-License-Identifier: AGPL-3.0
-import * as _ from "lodash";
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";
export enum CommonResourceServiceError {
- UNIQUE_VIOLATION = 'UniqueViolation',
+ UNIQUE_NAME_VIOLATION = 'UniqueNameViolation',
OWNERSHIP_CYCLE = 'OwnershipCycle',
MODIFYING_CONTAINER_REQUEST_FINAL_STATE = 'ModifyingContainerRequestFinalState',
NAME_HAS_ALREADY_BEEN_TAKEN = 'NameHasAlreadyBeenTaken',
}
export class CommonResourceService<T extends Resource> extends CommonService<T> {
+ constructor(serverApi: AxiosInstance, resourceType: string, actions: ApiActions, readOnlyFields: string[] = []) {
+ super(serverApi, resourceType, actions, readOnlyFields.concat([
+ 'uuid',
+ 'etag',
+ 'kind'
+ ]));
+ }
- constructor(serverApi: AxiosInstance, resourceType: string, actions: ApiActions) {
- super(serverApi, resourceType, actions);
+ create(data?: Partial<T>) {
+ if (data !== undefined) {
+ this.readOnlyFields.forEach( field => delete data[field] );
+ }
+ return super.create(data);
+ }
+
+ update(uuid: string, data: Partial<T>) {
+ if (data !== undefined) {
+ this.readOnlyFields.forEach( field => delete data[field] );
+ }
+ return super.update(uuid, data);
}
-
}
export const getCommonResourceServiceError = (errorResponse: any) => {
const error = errorResponse.errors.join('');
switch (true) {
case /UniqueViolation/.test(error):
- return CommonResourceServiceError.UNIQUE_VIOLATION;
+ return CommonResourceServiceError.UNIQUE_NAME_VIOLATION;
case /ownership cycle/.test(error):
return CommonResourceServiceError.OWNERSHIP_CYCLE;
case /Mounts cannot be modified in state 'Final'/.test(error):