Skip to content

Commit ddf1a7b

Browse files
authored
Merge pull request #82 from IQSS/80-files-filters
Add filters to getDatasetFiles use case
2 parents d47a10c + 33671e5 commit ddf1a7b

File tree

24 files changed

+257
-187
lines changed

24 files changed

+257
-187
lines changed

src/core/infra/repositories/ApiRepository.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ import { ReadError } from '../../domain/repositories/ReadError';
44
import { WriteError } from '../../domain/repositories/WriteError';
55

66
export abstract class ApiRepository {
7-
DATASET_VERSION_LATEST = ':latest';
8-
97
public async doGet(apiEndpoint: string, authRequired = false, queryParams: object = {}): Promise<AxiosResponse> {
108
return await axios
119
.get(this.buildRequestUrl(apiEndpoint), this.buildRequestConfig(authRequired, queryParams))
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export enum DatasetNotNumberedVersion {
2+
DRAFT = ':draft',
3+
LATEST = ':latest',
4+
}

src/datasets/domain/repositories/IDatasetsRepository.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import { Dataset } from '../models/Dataset';
22

33
export interface IDatasetsRepository {
44
getDatasetSummaryFieldNames(): Promise<string[]>;
5-
getDataset(datasetId: number | string, datasetVersionId?: string): Promise<Dataset>;
5+
getDataset(datasetId: number | string, datasetVersionId: string): Promise<Dataset>;
66
getPrivateUrlDataset(token: string): Promise<Dataset>;
7-
getDatasetCitation(datasetId: number, datasetVersionId?: string): Promise<string>;
7+
getDatasetCitation(datasetId: number, datasetVersionId: string): Promise<string>;
88
getPrivateUrlDatasetCitation(token: string): Promise<string>;
99
}
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { UseCase } from '../../../core/domain/useCases/UseCase';
22
import { IDatasetsRepository } from '../repositories/IDatasetsRepository';
33
import { Dataset } from '../models/Dataset';
4+
import { DatasetNotNumberedVersion } from '../models/DatasetNotNumberedVersion';
45

56
export class GetDataset implements UseCase<Dataset> {
67
private datasetsRepository: IDatasetsRepository;
@@ -9,7 +10,10 @@ export class GetDataset implements UseCase<Dataset> {
910
this.datasetsRepository = datasetsRepository;
1011
}
1112

12-
async execute(datasetId: number | string, datasetVersionId?: string): Promise<Dataset> {
13+
async execute(
14+
datasetId: number | string,
15+
datasetVersionId: string | DatasetNotNumberedVersion = DatasetNotNumberedVersion.LATEST,
16+
): Promise<Dataset> {
1317
return await this.datasetsRepository.getDataset(datasetId, datasetVersionId);
1418
}
1519
}
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { UseCase } from '../../../core/domain/useCases/UseCase';
22
import { IDatasetsRepository } from '../repositories/IDatasetsRepository';
3+
import { DatasetNotNumberedVersion } from '../models/DatasetNotNumberedVersion';
34

45
export class GetDatasetCitation implements UseCase<string> {
56
private datasetsRepository: IDatasetsRepository;
@@ -8,7 +9,10 @@ export class GetDatasetCitation implements UseCase<string> {
89
this.datasetsRepository = datasetsRepository;
910
}
1011

11-
async execute(datasetId: number, datasetVersionId?: string): Promise<string> {
12+
async execute(
13+
datasetId: number,
14+
datasetVersionId: string | DatasetNotNumberedVersion = DatasetNotNumberedVersion.LATEST,
15+
): Promise<string> {
1216
return await this.datasetsRepository.getDatasetCitation(datasetId, datasetVersionId);
1317
}
1418
}

src/datasets/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ export {
2020
getDatasetCitation,
2121
getPrivateUrlDatasetCitation,
2222
};
23+
export { DatasetNotNumberedVersion } from './domain/models/DatasetNotNumberedVersion';
2324
export {
2425
Dataset,
2526
DatasetVersionInfo,

src/datasets/infra/repositories/DatasetsRepository.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,7 @@ export class DatasetsRepository extends ApiRepository implements IDatasetsReposi
2020
});
2121
}
2222

23-
public async getDataset(datasetId: number | string, datasetVersionId?: string): Promise<Dataset> {
24-
if (datasetVersionId === undefined) {
25-
datasetVersionId = this.DATASET_VERSION_LATEST;
26-
}
23+
public async getDataset(datasetId: number | string, datasetVersionId: string): Promise<Dataset> {
2724
let endpoint;
2825
if (typeof datasetId === 'number') {
2926
endpoint = `/datasets/${datasetId}/versions/${datasetVersionId}`;
@@ -37,10 +34,7 @@ export class DatasetsRepository extends ApiRepository implements IDatasetsReposi
3734
});
3835
}
3936

40-
public async getDatasetCitation(datasetId: number, datasetVersionId?: string): Promise<string> {
41-
if (datasetVersionId === undefined) {
42-
datasetVersionId = this.DATASET_VERSION_LATEST;
43-
}
37+
public async getDatasetCitation(datasetId: number, datasetVersionId: string): Promise<string> {
4438
return this.doGet(`/datasets/${datasetId}/versions/${datasetVersionId}/citation`, true)
4539
.then((response) => response.data.data.message)
4640
.catch((error) => {

src/files/domain/models/File.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export interface File {
77
version: number;
88
description?: string;
99
restricted: boolean;
10+
latestRestricted: boolean;
1011
directoryLabel?: string;
1112
datasetVersionId?: number;
1213
categories?: string[];
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
export class FileCriteria {
2+
constructor(
3+
public readonly orderCriteria: FileOrderCriteria = FileOrderCriteria.NAME_AZ,
4+
public readonly contentType?: string,
5+
public readonly accessStatus?: FileAccessStatus,
6+
public readonly categoryName?: string,
7+
public readonly searchText?: string,
8+
) {}
9+
10+
withOrderCriteria(orderCriteria: FileOrderCriteria): FileCriteria {
11+
return new FileCriteria(orderCriteria, this.contentType, this.accessStatus, this.categoryName);
12+
}
13+
14+
withContentType(contentType: string | undefined): FileCriteria {
15+
return new FileCriteria(this.orderCriteria, contentType, this.accessStatus, this.categoryName);
16+
}
17+
18+
withAccessStatus(accessStatus: FileAccessStatus | undefined): FileCriteria {
19+
return new FileCriteria(this.orderCriteria, this.contentType, accessStatus, this.categoryName);
20+
}
21+
22+
withCategoryName(categoryName: string | undefined): FileCriteria {
23+
return new FileCriteria(this.orderCriteria, this.contentType, this.accessStatus, categoryName);
24+
}
25+
26+
withSearchText(searchText: string | undefined): FileCriteria {
27+
return new FileCriteria(this.orderCriteria, this.contentType, this.accessStatus, this.categoryName, searchText);
28+
}
29+
}
30+
31+
export enum FileOrderCriteria {
32+
NAME_AZ = 'NameAZ',
33+
NAME_ZA = 'NameZA',
34+
NEWEST = 'Newest',
35+
OLDEST = 'Oldest',
36+
SIZE = 'Size',
37+
TYPE = 'Type',
38+
}
39+
40+
export enum FileAccessStatus {
41+
PUBLIC = 'Public',
42+
RESTRICTED = 'Restricted',
43+
EMBARGOED = 'EmbargoedThenRestricted',
44+
EMBARGOED_RESTRICTED = 'EmbargoedThenPublic',
45+
}

src/files/domain/models/FileOrderCriteria.ts

Lines changed: 0 additions & 8 deletions
This file was deleted.

0 commit comments

Comments
 (0)