-export class CommonResourceService<T extends Resource> {
-
- static mapResponseKeys = (response: { data: any }): Promise<any> =>
- 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<R>(promise: AxiosPromise<R>): Promise<R> {
- return promise
- .then(CommonResourceService.mapResponseKeys)
- .catch(({ response }) => Promise.reject<Errors>(CommonResourceService.mapResponseKeys(response)));
- }
-
- protected serverApi: AxiosInstance;
- protected resourceType: string;
-
- constructor(serverApi: AxiosInstance, resourceType: string) {
- this.serverApi = serverApi;
- this.resourceType = '/' + resourceType + '/';
- }
-
- create(data?: Partial<T> | any) {
- return CommonResourceService.defaultResponse(
- this.serverApi
- .post<T>(this.resourceType, data && CommonResourceService.mapKeys(_.snakeCase)(data)));
- }
-
- delete(uuid: string): Promise<T> {
- return CommonResourceService.defaultResponse(
- this.serverApi
- .delete(this.resourceType + uuid));
- }
-
- get(uuid: string) {
- return CommonResourceService.defaultResponse(
- this.serverApi
- .get<T>(this.resourceType + uuid));
+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',
+ 'canWrite',
+ 'canManage',
+ 'createdAt',
+ 'modifiedAt',
+ 'modifiedByClientUuid',
+ 'modifiedByUserUuid'
+ ]));