fileSizeTotal: number;
}
+// We exclude 'manifestText' and 'unsignedManifestText' from the default
+export const defaultCollectionSelectedFields = [
+ 'name',
+ 'description',
+ 'portableDataHash',
+ 'replicationDesired',
+ 'replicationConfirmed',
+ 'replicationConfirmedAt',
+ 'storageClassesDesired',
+ 'storageClassesConfirmed',
+ 'storageClassesConfirmedAt',
+ 'currentVersionUuid',
+ 'version',
+ 'preserveVersion',
+ 'fileCount',
+ 'fileSizeTotal',
+ // ResourceWithProperties field
+ 'properties',
+ // TrashableResource fields
+ 'trashAt',
+ 'deleteAt',
+ 'isTrashed',
+ // Resource fields
+ 'uuid',
+ 'ownerUuid',
+ 'createdAt',
+ 'modifiedByClientUuid',
+ 'modifiedByUserUuid',
+ 'modifiedAt',
+ 'href',
+ 'kind',
+ 'etag',
+];
+
export const getCollectionUrl = (uuid: string) => {
return `/collections/${uuid}`;
};
import axios, { AxiosInstance } from 'axios';
import MockAdapter from 'axios-mock-adapter';
-import { CollectionResource } from 'models/collection';
+import { snakeCase } from 'lodash';
+import { CollectionResource, defaultCollectionSelectedFields } from 'models/collection';
import { AuthService } from '../auth-service/auth-service';
import { CollectionService } from './collection-service';
});
describe('get', () => {
- it('should make a list request with uuid filtering', async () => {
+ it('should make a request with default selected fields', async () => {
serverApi.get = jest.fn(() => Promise.resolve(
{ data: { items: [{}] } }
));
const uuid = 'zzzzz-4zz18-0123456789abcde'
await collectionService.get(uuid);
expect(serverApi.get).toHaveBeenCalledWith(
- '/collections', {
+ `/collections/${uuid}`, {
params: {
- filters: `[["uuid","=","zzzzz-4zz18-0123456789abcde"]]`,
- include_old_versions: true,
+ select: JSON.stringify(defaultCollectionSelectedFields.map(snakeCase)),
},
}
);
const uuid = 'zzzzz-4zz18-0123456789abcde'
await collectionService.get(uuid, undefined, ['manifestText']);
expect(serverApi.get).toHaveBeenCalledWith(
- '/collections', {
+ `/collections/${uuid}`, {
params: {
- filters: `[["uuid","=","zzzzz-4zz18-0123456789abcde"]]`,
- include_old_versions: true,
select: `["manifest_text"]`
},
}
//
// SPDX-License-Identifier: AGPL-3.0
-import { CollectionResource } from "models/collection";
+import { CollectionResource, defaultCollectionSelectedFields } from "models/collection";
import { AxiosInstance } from "axios";
import { CollectionFile, CollectionDirectory } from "models/collection-file";
import { WebDAV } from "common/webdav";
import { TrashableResourceService } from "services/common-service/trashable-resource-service";
import { ApiActions } from "services/api/api-actions";
import { customEncodeURI } from "common/url";
-import { FilterBuilder } from "services/api/filter-builder";
-import { ListArguments } from "services/common-service/common-service";
import { Session } from "models/session";
export type UploadProgress = (fileId: number, loaded: number, total: number, currentTime: number) => void;
async get(uuid: string, showErrors?: boolean, select?: string[], session?: Session) {
super.validateUuid(uuid);
- // We use a filtered list request to avoid getting the manifest text
- const filters = new FilterBuilder().addEqual('uuid', uuid).getFilters();
- const listArgs: ListArguments = {filters, includeOldVersions: true};
- if (select) {
- listArgs.select = select;
- }
-
- if (!session) {
- const lst = await super.list(listArgs, showErrors);
- return lst.items[0];
- } else {
- return super.get(uuid, showErrors, select, session);
- }
+ const selectParam = select || defaultCollectionSelectedFields;
+ return super.get(uuid, showErrors, selectParam, session);
}
create(data?: Partial<CollectionResource>) {
get(uuid: string, showErrors?: boolean, select?: string[], session?: Session) {
this.validateUuid(uuid);
- const cfg: AxiosRequestConfig = {};
+ 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}`, session ? cfg : undefined),
+ .get<T>(`/${this.resourceType}/${uuid}`, cfg),
this.actions,
true, // mapKeys
showErrors