Skip to content

Commit 7fb4cfc

Browse files
committed
return email_verified with current user
1 parent 72d220d commit 7fb4cfc

File tree

6 files changed

+46
-8
lines changed

6 files changed

+46
-8
lines changed

docs/cc-api-spec.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

src/modules/common/dto/user.dto.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ export class UserDto {
1818
@ApiModelProperty()
1919
readonly _id: string;
2020

21+
// for mentorship mentor / mentee
22+
@ApiModelProperty()
23+
readonly id: string;
24+
2125
@ApiModelProperty()
2226
@IsEmail()
2327
@IsString()
@@ -37,6 +41,15 @@ export class UserDto {
3741
@IsUrl()
3842
readonly avatar: string;
3943

44+
@ApiModelPropertyOptional()
45+
@IsString()
46+
@IsUrl()
47+
readonly image: string;
48+
49+
@ApiModelPropertyOptional()
50+
@IsString()
51+
readonly auth0Id: string;
52+
4053
@ApiModelPropertyOptional()
4154
@Length(3, 50)
4255
@IsString()
@@ -94,7 +107,7 @@ export class UserDto {
94107
@ArrayMaxSize(3)
95108
readonly channels: Channel[];
96109

97-
constructor(values) {
110+
constructor(values: Partial<UserDto>) {
98111
Object.assign(this, values);
99112
}
100113
}

src/modules/common/interfaces/user.interface.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ export interface User extends Document {
2626
readonly _id: ObjectID;
2727
readonly auth0Id: string;
2828
readonly email: string;
29+
readonly nickname: string;
30+
readonly picture: string;
2931
readonly email_verified: boolean;
3032
readonly available: boolean;
3133
readonly name: string;

src/modules/common/users.service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export class UsersService {
2727
}
2828

2929
async findByAuth0Id(auth0Id: string): Promise<User> {
30-
return await this.userModel.findOne({ auth0Id }).exec();
30+
return await this.userModel.findOne({ auth0Id }).lean().exec();
3131
}
3232

3333
async findByEmail(email: string): Promise<User> {

src/modules/users/__tests__/users.controller.spec.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ describe('modules/users/UsersController', () => {
117117

118118
beforeEach(() => {
119119
request = { user: { auth0Id: '123' } };
120-
data = { _id: 123, name: 'Crysfel Villa' } as User;
120+
data = { _id: 123, name: 'Crysfel Villa', email_verified: false } as User;
121121
response = { success: true, data };
122122
});
123123

@@ -127,6 +127,21 @@ describe('modules/users/UsersController', () => {
127127
expect(await usersController.currentUser(request)).toEqual(response);
128128
});
129129

130+
it('should return if the user has verified email', async () => {
131+
usersService.findByAuth0Id = jest.fn(() => Promise.resolve(data));
132+
133+
expect(
134+
await usersController.currentUser({
135+
...request,
136+
user: { ...request.user, email_verified: true },
137+
}),
138+
).toMatchObject({
139+
data: {
140+
email_verified: true,
141+
},
142+
});
143+
});
144+
130145
it('should create a new user', async () => {
131146
usersService.findByAuth0Id = jest.fn(() => Promise.resolve(undefined));
132147
usersService.findByEmail = jest.fn(() => Promise.resolve(undefined));

src/modules/users/users.controller.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import * as Sentry from '@sentry/node';
2+
import { Request } from 'express';
23

34
import {
45
Controller,
@@ -76,18 +77,18 @@ export class UsersController {
7677

7778
@ApiOperation({ title: 'Returns the current user' })
7879
@Get('current')
79-
async currentUser(@Req() request) {
80+
async currentUser(@Req() request: Request) {
8081
const userId: string = request.user.auth0Id;
8182
const currentUser: User = await this.usersService.findByAuth0Id(userId);
8283
const response = {
8384
success: true,
84-
data: currentUser,
85+
data: this.enrichUserResponse(currentUser, request.user),
8586
};
8687

8788
if (!currentUser) {
8889
try {
8990
const data: any = await this.auth0Service.getAdminAccessToken();
90-
const user: any = await this.auth0Service.getUserProfile(
91+
const user: User = await this.auth0Service.getUserProfile(
9192
data.access_token,
9293
userId,
9394
);
@@ -137,7 +138,7 @@ export class UsersController {
137138
},
138139
});
139140

140-
response.data = newUser;
141+
response.data = this.enrichUserResponse(newUser, request.user);
141142
}
142143
} catch (error) {
143144
return {
@@ -158,6 +159,13 @@ export class UsersController {
158159
return response;
159160
}
160161

162+
private enrichUserResponse(user: User, auth0User: User): User {
163+
return {
164+
...user,
165+
email_verified: Boolean(auth0User.email_verified),
166+
};
167+
}
168+
161169
private async shouldIncludeChannels(
162170
currentUser?: User,
163171
requestedUser?: User,

0 commit comments

Comments
 (0)