Skip to content

Commit b206735

Browse files
committed
Refactor: DatasetWriteUseCase to reuse logic shared across different use cases
1 parent 33a3760 commit b206735

File tree

3 files changed

+58
-31
lines changed

3 files changed

+58
-31
lines changed
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
export interface UseCase<T> {
2-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
3-
execute(...args: any[]): Promise<T>
2+
execute(...args: unknown[]): Promise<T>
43
}
Lines changed: 6 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,18 @@
1-
import { UseCase } from '../../../core/domain/useCases/UseCase'
21
import { IDatasetsRepository } from '../repositories/IDatasetsRepository'
3-
import { NewDatasetDTO, NewDatasetMetadataBlockValuesDTO } from '../dtos/NewDatasetDTO'
2+
import { NewDatasetDTO } from '../dtos/NewDatasetDTO'
43
import { NewResourceValidator } from '../../../core/domain/useCases/validators/NewResourceValidator'
54
import { IMetadataBlocksRepository } from '../../../metadataBlocks/domain/repositories/IMetadataBlocksRepository'
6-
import { MetadataBlock } from '../../../metadataBlocks'
75
import { CreatedDatasetIdentifiers } from '../models/CreatedDatasetIdentifiers'
86
import { ROOT_COLLECTION_ALIAS } from '../../../collections/domain/models/Collection'
7+
import { DatasetWriteUseCase } from './DatasetWriteUseCase'
98

10-
export class CreateDataset implements UseCase<CreatedDatasetIdentifiers> {
11-
private datasetsRepository: IDatasetsRepository
12-
private metadataBlocksRepository: IMetadataBlocksRepository
13-
private newDatasetValidator: NewResourceValidator
14-
9+
export class CreateDataset extends DatasetWriteUseCase<CreatedDatasetIdentifiers> {
1510
constructor(
1611
datasetsRepository: IDatasetsRepository,
1712
metadataBlocksRepository: IMetadataBlocksRepository,
1813
newDatasetValidator: NewResourceValidator
1914
) {
20-
this.datasetsRepository = datasetsRepository
21-
this.metadataBlocksRepository = metadataBlocksRepository
22-
this.newDatasetValidator = newDatasetValidator
15+
super(datasetsRepository, metadataBlocksRepository, newDatasetValidator)
2316
}
2417

2518
/**
@@ -37,23 +30,7 @@ export class CreateDataset implements UseCase<CreatedDatasetIdentifiers> {
3730
collectionId = ROOT_COLLECTION_ALIAS
3831
): Promise<CreatedDatasetIdentifiers> {
3932
const metadataBlocks = await this.getNewDatasetMetadataBlocks(newDataset)
40-
41-
this.newDatasetValidator.validate(newDataset, metadataBlocks)
42-
43-
return this.datasetsRepository.createDataset(newDataset, metadataBlocks, collectionId)
44-
}
45-
46-
async getNewDatasetMetadataBlocks(newDataset: NewDatasetDTO): Promise<MetadataBlock[]> {
47-
const metadataBlocks: MetadataBlock[] = []
48-
await Promise.all(
49-
newDataset.metadataBlockValues.map(
50-
async (metadataBlockValue: NewDatasetMetadataBlockValuesDTO) => {
51-
metadataBlocks.push(
52-
await this.metadataBlocksRepository.getMetadataBlockByName(metadataBlockValue.name)
53-
)
54-
}
55-
)
56-
)
57-
return metadataBlocks
33+
this.getNewDatasetValidator().validate(newDataset, metadataBlocks)
34+
return this.getDatasetsRepository().createDataset(newDataset, metadataBlocks, collectionId)
5835
}
5936
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import { UseCase } from '../../../core/domain/useCases/UseCase'
2+
import { IDatasetsRepository } from '../repositories/IDatasetsRepository'
3+
import { NewDatasetDTO, NewDatasetMetadataBlockValuesDTO } from '../dtos/NewDatasetDTO'
4+
import { NewResourceValidator } from '../../../core/domain/useCases/validators/NewResourceValidator'
5+
import { IMetadataBlocksRepository } from '../../../metadataBlocks/domain/repositories/IMetadataBlocksRepository'
6+
import { MetadataBlock } from '../../../metadataBlocks'
7+
8+
export abstract class DatasetWriteUseCase<T> implements UseCase<T> {
9+
private datasetsRepository: IDatasetsRepository
10+
private metadataBlocksRepository: IMetadataBlocksRepository
11+
private newDatasetValidator: NewResourceValidator
12+
13+
constructor(
14+
datasetsRepository: IDatasetsRepository,
15+
metadataBlocksRepository: IMetadataBlocksRepository,
16+
newDatasetValidator: NewResourceValidator
17+
) {
18+
this.datasetsRepository = datasetsRepository
19+
this.metadataBlocksRepository = metadataBlocksRepository
20+
this.newDatasetValidator = newDatasetValidator
21+
}
22+
23+
abstract execute(...args: unknown[]): Promise<T>
24+
25+
getDatasetsRepository(): IDatasetsRepository {
26+
return this.datasetsRepository
27+
}
28+
29+
getMetadataBlocksRepository(): IMetadataBlocksRepository {
30+
return this.metadataBlocksRepository
31+
}
32+
33+
getNewDatasetValidator(): NewResourceValidator {
34+
return this.newDatasetValidator
35+
}
36+
37+
async getNewDatasetMetadataBlocks(newDataset: NewDatasetDTO): Promise<MetadataBlock[]> {
38+
const metadataBlocks: MetadataBlock[] = []
39+
await Promise.all(
40+
newDataset.metadataBlockValues.map(
41+
async (metadataBlockValue: NewDatasetMetadataBlockValuesDTO) => {
42+
metadataBlocks.push(
43+
await this.metadataBlocksRepository.getMetadataBlockByName(metadataBlockValue.name)
44+
)
45+
}
46+
)
47+
)
48+
return metadataBlocks
49+
}
50+
}
51+

0 commit comments

Comments
 (0)