// SPDX-License-Identifier: AGPL-3.0
import { camelCase, isPlainObject, isArray, snakeCase } from "lodash";
-import { AxiosInstance, AxiosPromise } from "axios";
+import { AxiosInstance, AxiosPromise, AxiosRequestConfig } from "axios";
import uuid from "uuid/v4";
import { ApiActions } from "services/api/api-actions";
import QueryString from "query-string";
+import { Session } from "models/session";
interface Errors {
status: number;
}
}
- private validateUuid(uuid: string) {
+ protected validateUuid(uuid: string) {
if (uuid === "") {
throw new Error('UUID cannot be empty string');
}
);
}
- get(uuid: string, showErrors?: boolean) {
+ get(uuid: string, showErrors?: boolean, select?: string[], session?: Session) {
this.validateUuid(uuid);
+
+ const cfg: AxiosRequestConfig = {
+ params: {
+ select: select
+ ? `[${select.map(snakeCase).map(s => `"${s}"`).join(',')}]`
+ : undefined
+ }
+ };
+ if (session) {
+ cfg.baseURL = session.baseUrl;
+ cfg.headers = { 'Authorization': 'Bearer ' + session.token };
+ }
+
return CommonService.defaultResponse(
this.serverApi
- .get<T>(`/${this.resourceType}/${uuid}`),
+ .get<T>(`/${this.resourceType}/${uuid}`, cfg),
this.actions,
true, // mapKeys
showErrors
);
}
- list(args: ListArguments = {}): Promise<ListResults<T>> {
- const { filters, order, ...other } = args;
+ list(args: ListArguments = {}, showErrors?: boolean): Promise<ListResults<T>> {
+ const { filters, select, ...other } = args;
const params = {
...CommonService.mapKeys(snakeCase)(other),
filters: filters ? `[${filters}]` : undefined,
- order: order ? order : undefined
+ select: select
+ ? `[${select.map(snakeCase).map(s => `"${s}"`).join(', ')}]`
+ : undefined
};
if (QueryString.stringify(params).length <= 1500) {
return CommonService.defaultResponse(
this.serverApi.get(`/${this.resourceType}`, { params }),
- this.actions
+ this.actions,
+ showErrors
);
} else {
// Using the POST special case to avoid URI length 414 errors.
_method: 'GET'
}
}),
- this.actions
+ this.actions,
+ showErrors
);
}
}