// SPDX-License-Identifier: AGPL-3.0
import * as _ from "lodash";
-import FilterBuilder from "./filter-builder";
-import OrderBuilder from "./order-builder";
+import { FilterBuilder } from "./filter-builder";
+import { OrderBuilder } from "./order-builder";
import { AxiosInstance } from "axios";
-
-export interface Resource {
- uuid: string;
- ownerUuid: string;
- createdAt: string;
- modifiedByClientUuid: string;
- modifiedByUserUuid: string;
- modifiedAt: string;
- href: string;
- kind: string;
- etag: string;
-}
+import { Resource } from "../../models/resource";
export interface ListArguments {
- limit: number;
- offset: number;
+ limit?: number;
+ offset?: number;
filters?: FilterBuilder;
order?: OrderBuilder;
select?: string[];
itemsAvailable: number;
}
-export default class CommonResourceService<T extends Resource> {
+export class CommonResourceService<T extends Resource> {
static mapResponseKeys = (response: any): Promise<any> =>
CommonResourceService.mapKeys(_.camelCase)(response.data)
this.resourceType = '/' + resourceType + '/';
}
- create() {
- throw new Error("Not implemented");
+ create(data: Partial<T>) {
+ return this.serverApi
+ .post<T>(this.resourceType, CommonResourceService.mapKeys(_.snakeCase)(data))
+ .then(CommonResourceService.mapResponseKeys);
}
delete(uuid: string): Promise<T> {
.then(CommonResourceService.mapResponseKeys);
}
- list(args: ListArguments): Promise<ListResults<T>> {
+ list(args: ListArguments = {}): Promise<ListResults<T>> {
const { filters, order, ...other } = args;
const params = {
...other,
- filters: filters ? filters.get() : undefined,
+ filters: filters ? filters.serialize() : undefined,
order: order ? order.getOrder() : undefined
};
return this.serverApi
update(uuid: string) {
throw new Error("Not implemented");
}
-
}