Skip to content

Commit 5a410bc

Browse files
committed
feat: add use case for assigning role on dataset
1 parent c861f70 commit 5a410bc

4 files changed

Lines changed: 50 additions & 1 deletion

File tree

src/datasets/domain/repositories/IDatasetsRepository.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,4 +102,9 @@ export interface IDatasetsRepository {
102102
payload: DatasetLicenseUpdateRequest
103103
): Promise<void>
104104
getDatasetStorageDriver(datasetId: number | string): Promise<StorageDriver>
105+
assignRoleOnDataset(
106+
datasetId: number | string,
107+
roleAssignee: string,
108+
roleAlias: string
109+
): Promise<void>
105110
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { UseCase } from '../../../core/domain/useCases/UseCase'
2+
import { IDatasetsRepository } from '../repositories/IDatasetsRepository'
3+
4+
export class AssignRoleOnDataset implements UseCase<void> {
5+
private datasetsRepository: IDatasetsRepository
6+
7+
constructor(datasetsRepository: IDatasetsRepository) {
8+
this.datasetsRepository = datasetsRepository
9+
}
10+
11+
/**
12+
* Assigns a new role to someone on the given dataset.
13+
*
14+
* @param {number | string} [datasetId] - The dataset identifier, which can be a string (for persistent identifiers), or a number (for numeric identifiers).
15+
* @param {string} [roleAssignee] - To whom the role should be assigned
16+
* @param {string} [roleAlias] - The alias of the role to be assigned
17+
* @returns {Promise<void>}
18+
*/
19+
async execute(
20+
datasetId: number | string,
21+
roleAssignee: string,
22+
roleAlias: string
23+
): Promise<void> {
24+
return await this.datasetsRepository.assignRoleOnDataset(datasetId, roleAssignee, roleAlias)
25+
}
26+
}

src/datasets/index.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import { GetDatasetCitationInOtherFormats } from './domain/useCases/GetDatasetCi
3434
import { UpdateTermsOfAccess } from './domain/useCases/UpdateTermsOfAccess'
3535
import { UpdateDatasetLicense } from './domain/useCases/UpdateDatasetLicense'
3636
import { GetDatasetStorageDriver } from './domain/useCases/GetDatasetStorageDriver'
37+
import { AssignRoleOnDataset } from './domain/useCases/AssignRoleOnDataset'
3738

3839
const datasetsRepository = new DatasetsRepository()
3940

@@ -84,6 +85,7 @@ const getDatasetCitationInOtherFormats = new GetDatasetCitationInOtherFormats(da
8485
const updateTermsOfAccess = new UpdateTermsOfAccess(datasetsRepository)
8586
const updateDatasetLicense = new UpdateDatasetLicense(datasetsRepository)
8687
const getDatasetStorageDriver = new GetDatasetStorageDriver(datasetsRepository)
88+
const assignRoleOnDataset = new AssignRoleOnDataset(datasetsRepository)
8789

8890
export {
8991
getDataset,
@@ -115,7 +117,8 @@ export {
115117
setAvailableLicensesForDatasetType,
116118
deleteDatasetType,
117119
updateDatasetLicense,
118-
getDatasetStorageDriver
120+
getDatasetStorageDriver,
121+
assignRoleOnDataset
119122
}
120123
export { DatasetNotNumberedVersion } from './domain/models/DatasetNotNumberedVersion'
121124
export { DatasetUserPermissions } from './domain/models/DatasetUserPermissions'

src/datasets/infra/repositories/DatasetsRepository.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -511,4 +511,19 @@ export class DatasetsRepository extends ApiRepository implements IDatasetsReposi
511511
throw error
512512
})
513513
}
514+
515+
public async assignRoleOnDataset(
516+
datasetId: number | string,
517+
roleAssignee: string,
518+
roleAlias: string
519+
): Promise<void> {
520+
return this.doPost(this.buildApiEndpoint(this.datasetsResourceName, 'assignments', datasetId), {
521+
assignee: roleAssignee,
522+
role: roleAlias
523+
})
524+
.then(() => undefined)
525+
.catch((error) => {
526+
throw error
527+
})
528+
}
514529
}

0 commit comments

Comments
 (0)