Skip to content

Commit be65eb4

Browse files
committed
feat: new use case for listing dataset types #363
1 parent cc77995 commit be65eb4

File tree

11 files changed

+194
-0
lines changed

11 files changed

+194
-0
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export interface DatasetType {
2+
id: number
3+
name: string
4+
linkedMetadataBlocks?: string[]
5+
availableLicenses?: string[]
6+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { DatasetType } from '../models/DatasetType'
2+
3+
export interface IDatasetTypesRepository {
4+
getAvailableDatasetTypes(): Promise<DatasetType[]>
5+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export interface DatasetTypePayload {
2+
id: number
3+
name: string
4+
linkedMetadataBlocks?: string[]
5+
availableLicenses?: string[]
6+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { AxiosResponse } from 'axios'
2+
import { DatasetType } from '../../models/DatasetType'
3+
import { DatasetTypePayload } from './DatasetTypePayload'
4+
5+
export const transformPayloadToDatasetType = (response: AxiosResponse): DatasetType[] => {
6+
const payload = response.data.data as DatasetTypePayload[]
7+
8+
return payload.map((datasetType: DatasetTypePayload) => ({
9+
id: datasetType.id,
10+
name: datasetType.name,
11+
linkedMetadataBlocks: datasetType.linkedMetadataBlocks,
12+
availableLicenses: datasetType.availableLicenses
13+
}))
14+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { UseCase } from '../../../core/domain/useCases/UseCase'
2+
import { DatasetType } from '../models/DatasetType'
3+
import { IDatasetTypesRepository } from '../repositories/IDatasetTypesRepository'
4+
5+
export class GetAvailableDatasetTypes implements UseCase<DatasetType[]> {
6+
private datasetTypesRepository: IDatasetTypesRepository
7+
8+
constructor(datasetTypesRepository: IDatasetTypesRepository) {
9+
this.datasetTypesRepository = datasetTypesRepository
10+
}
11+
12+
/**
13+
* Returns the list of available dataset types that can be selected for a dataset.
14+
*
15+
* @returns {Promise<DatasetType[]>}
16+
*/
17+
async execute(): Promise<DatasetType[]> {
18+
return await this.datasetTypesRepository.getAvailableDatasetTypes()
19+
}
20+
}

src/datasetTypes/index.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { DatasetTypesRepository } from './infra/repositories/DatasetTypesRepository'
2+
import { GetAvailableDatasetTypes } from './domain/useCases/GetAvailableDatasetTypes'
3+
4+
const datasetTypesRepository = new DatasetTypesRepository()
5+
6+
const getAvailableDatasetTypes = new GetAvailableDatasetTypes(datasetTypesRepository)
7+
8+
export { getAvailableDatasetTypes }
9+
10+
export { DatasetType } from './domain/models/DatasetType'
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { ApiRepository } from '../../../core/infra/repositories/ApiRepository'
2+
import { IDatasetTypesRepository } from '../../domain/repositories/IDatasetTypesRepository'
3+
import { DatasetType } from '../../domain/models/DatasetType'
4+
5+
export class DatasetTypesRepository extends ApiRepository implements IDatasetTypesRepository {
6+
private readonly datasetTypesResourceName: string = 'datasets/datasetTypes'
7+
8+
public async getAvailableDatasetTypes(): Promise<DatasetType[]> {
9+
return this.doGet(this.buildApiEndpoint(this.datasetTypesResourceName))
10+
.then((response) => response.data.data)
11+
.catch((error) => {
12+
throw error
13+
})
14+
}
15+
}

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,4 @@ export * from './files'
1010
export * from './contactInfo'
1111
export * from './notifications'
1212
export * from './search'
13+
export * from './datasetTypes'
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { ApiConfig } from '../../../src'
2+
import { getAvailableDatasetTypes } from '../../../src/datasetTypes'
3+
import { DatasetType } from '../../../src/datasetTypes/domain/models/DatasetType'
4+
import { DataverseApiAuthMechanism } from '../../../src/core/infra/repositories/ApiConfig'
5+
import { TestConstants } from '../../testHelpers/TestConstants'
6+
7+
describe('getAvailableDatasetTypes', () => {
8+
describe('execute', () => {
9+
beforeAll(async () => {
10+
ApiConfig.init(
11+
TestConstants.TEST_API_URL,
12+
DataverseApiAuthMechanism.API_KEY,
13+
process.env.TEST_API_KEY
14+
)
15+
})
16+
17+
test('should return available dataset types', async () => {
18+
const actualDatasetTypes: DatasetType[] = await getAvailableDatasetTypes.execute()
19+
const expectedDatasetTypes = [
20+
{
21+
id: 1,
22+
name: 'dataset',
23+
linkedMetadataBlocks: [],
24+
availableLicenses: []
25+
}
26+
]
27+
28+
expect(actualDatasetTypes).toEqual(expectedDatasetTypes)
29+
})
30+
})
31+
})
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import {
2+
ApiConfig,
3+
DataverseApiAuthMechanism
4+
} from '../../../src/core/infra/repositories/ApiConfig'
5+
import { TestConstants } from '../../testHelpers/TestConstants'
6+
import { DatasetTypesRepository } from '../../../src/datasetTypes/infra/repositories/DatasetTypesRepository'
7+
// import { LicensesRepository } from '../../../src/licenses/infra/repositories/LicensesRepository'
8+
9+
describe('DatasetTypesRepository', () => {
10+
const sut: DatasetTypesRepository = new DatasetTypesRepository()
11+
12+
describe('getAvailableDatasetTypes', () => {
13+
beforeAll(async () => {
14+
ApiConfig.init(
15+
TestConstants.TEST_API_URL,
16+
DataverseApiAuthMechanism.API_KEY,
17+
process.env.TEST_API_KEY
18+
)
19+
})
20+
21+
test('should return list of available dataset types', async () => {
22+
const actual = await sut.getAvailableDatasetTypes()
23+
24+
const datasetTypes = [
25+
{
26+
id: 1,
27+
name: 'dataset',
28+
linkedMetadataBlocks: [],
29+
availableLicenses: []
30+
}
31+
]
32+
33+
expect(actual).toEqual(datasetTypes)
34+
})
35+
})
36+
})

0 commit comments

Comments
 (0)