Skip to content

Commit 99d9d78

Browse files
committed
feat: add register user use case
1 parent 045ca23 commit 99d9d78

File tree

6 files changed

+76
-1
lines changed

6 files changed

+76
-1
lines changed

docs/useCases.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ The different use cases currently available in the package are classified below,
5858
- [Users write use cases](#users-write-use-cases)
5959
- [Delete Current API Token](#delete-current-api-token)
6060
- [Recreate Current API Token](#recreate-current-api-token)
61+
- [Register User](#register-user)
6162
- [Info](#Info)
6263
- [Get Dataverse Backend Version](#get-dataverse-backend-version)
6364
- [Get Maximum Embargo Duration In Months](#get-maximum-embargo-duration-in-months)
@@ -1269,6 +1270,34 @@ recreateCurrentApiToken.execute().then((apiTokenInfo: ApiTokenInfo) => {
12691270

12701271
_See [use case](../src/users/domain/useCases/RecreateCurrentApiToken.ts) implementation_.
12711272

1273+
### Register User
1274+
1275+
Register a new user, given a [UserDTO](../src/users/domain/dtos/UserDTO.ts)
1276+
1277+
##### Example call:
1278+
1279+
```typescript
1280+
import { registerUser } from '@iqss/dataverse-client-javascript'
1281+
1282+
/* ... */
1283+
1284+
const userDTO: UserDTO = {
1285+
username: 'johndoe'
1286+
firstName: 'John'
1287+
lastName: 'Doe'
1288+
emailAddress: '[email protected]'
1289+
position: ''
1290+
affiliation: ''
1291+
termsAccepted: true
1292+
}
1293+
1294+
registerUser.execute(userDTO)
1295+
1296+
/* ... */
1297+
```
1298+
1299+
_See [use case](../src/users/domain/useCases/RegisterUser.ts) implementation_.
1300+
12721301
## Info
12731302

12741303
#### Get Dataverse Backend Version

src/users/domain/dtos/UserDTO.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
export interface UserDTO {
2+
username?: string
3+
firstName?: string
4+
lastName?: string
5+
emailAddress?: string
6+
position?: string
7+
affiliation?: string
8+
termsAccepted: boolean
9+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import { ApiTokenInfo } from '../models/ApiTokenInfo'
22
import { AuthenticatedUser } from '../models/AuthenticatedUser'
3+
import { UserDTO } from '../dtos/UserDTO'
34

45
export interface IUsersRepository {
56
getCurrentAuthenticatedUser(): Promise<AuthenticatedUser>
67
recreateCurrentApiToken(): Promise<ApiTokenInfo>
78
getCurrentApiToken(): Promise<ApiTokenInfo>
89
deleteCurrentApiToken(): Promise<void>
10+
registerUser(userDTO: UserDTO): Promise<void>
911
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { UseCase } from '../../../core/domain/useCases/UseCase'
2+
import { UserDTO } from '../dtos/UserDTO'
3+
import { IUsersRepository } from '../repositories/IUsersRepository'
4+
5+
export class RegisterUser implements UseCase<void> {
6+
private usersRepository: IUsersRepository
7+
8+
constructor(usersRepository: IUsersRepository) {
9+
this.usersRepository = usersRepository
10+
}
11+
12+
/**
13+
* Registers a new user, given a UserDTO object. Only available through DataverseApiAuthMechanism.BEARER_TOKEN auth mechanism.
14+
*
15+
* @param {UserDTO} [userDTO] - UserDTO object including the new user data.
16+
* @returns {Promise<void>} - This method does not return anything upon successful completion.
17+
* @throws {WriteError} - If there are errors while writing data.
18+
*/
19+
async execute(userDTO: UserDTO): Promise<void> {
20+
return await this.usersRepository.registerUser(userDTO)
21+
}
22+
}

src/users/index.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,23 @@ import { GetCurrentAuthenticatedUser } from './domain/useCases/GetCurrentAuthent
33
import { RecreateCurrentApiToken } from './domain/useCases/RecreateCurrentApiToken'
44
import { GetCurrentApiToken } from './domain/useCases/GetCurrentApiToken'
55
import { DeleteCurrentApiToken } from './domain/useCases/DeleteCurrentApiToken'
6+
import { RegisterUser } from './domain/useCases/RegisterUser'
67

78
const usersRepository = new UsersRepository()
89

910
const getCurrentAuthenticatedUser = new GetCurrentAuthenticatedUser(usersRepository)
1011
const recreateCurrentApiToken = new RecreateCurrentApiToken(usersRepository)
1112
const getCurrentApiToken = new GetCurrentApiToken(usersRepository)
1213
const deleteCurrentApiToken = new DeleteCurrentApiToken(usersRepository)
14+
const registerUser = new RegisterUser(usersRepository)
1315

1416
export {
1517
getCurrentAuthenticatedUser,
1618
recreateCurrentApiToken,
1719
getCurrentApiToken,
18-
deleteCurrentApiToken
20+
deleteCurrentApiToken,
21+
registerUser
1922
}
2023
export { AuthenticatedUser } from './domain/models/AuthenticatedUser'
2124
export { ApiTokenInfo } from './domain/models/ApiTokenInfo'
25+
export { UserDTO } from './domain/dtos/UserDTO'

src/users/infra/repositories/UsersRepository.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
transformGetApiTokenResponseToApiTokenInfo,
88
transformRecreateApiTokenResponseToApiTokenInfo
99
} from './transformers/apiTokenInfoTransformers'
10+
import { UserDTO } from '../../domain/dtos/UserDTO'
1011

1112
export class UsersRepository extends ApiRepository implements IUsersRepository {
1213
private readonly usersResourceName: string = 'users'
@@ -43,6 +44,14 @@ export class UsersRepository extends ApiRepository implements IUsersRepository {
4344
})
4445
}
4546

47+
public async registerUser(userDTO: UserDTO): Promise<void> {
48+
return this.doPost(`/${this.usersResourceName}/register`, userDTO)
49+
.then(() => undefined)
50+
.catch((error) => {
51+
throw error
52+
})
53+
}
54+
4655
private getAuthenticatedUserFromResponse(response: AxiosResponse): AuthenticatedUser {
4756
const responseData = response.data.data
4857
return {

0 commit comments

Comments
 (0)