Skip to content

Commit 54de11a

Browse files
authored
Merge pull request #363 from boostcampwm2023/BE-feature/user-decorator
User 커스텀 데코레이터
2 parents 98c16f5 + 905e61a commit 54de11a

7 files changed

+65
-63
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { createParamDecorator, ExecutionContext } from '@nestjs/common';
2+
3+
export const User = createParamDecorator(
4+
(data: string, ctx: ExecutionContext) => {
5+
const request = ctx.switchToHttp().getRequest();
6+
const user = request.user;
7+
return data ? user?.[data] : user;
8+
},
9+
);

nestjs-BE/server/src/profiles/profiles.controller.spec.ts

+10-11
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import {
66
import { Test, TestingModule } from '@nestjs/testing';
77
import { ProfilesController } from './profiles.controller';
88
import { ProfilesService } from './profiles.service';
9-
import { RequestWithUser } from '../utils/interface';
109

1110
describe('ProfilesController', () => {
1211
let controller: ProfilesController;
@@ -31,12 +30,12 @@ describe('ProfilesController', () => {
3130
});
3231

3332
describe('findProfile', () => {
34-
const requestMock = { user: { uuid: 'test uuid' } } as RequestWithUser;
33+
const userUuidMock = 'user uuid';
3534

3635
it('found profile', async () => {
3736
const testProfile = {
3837
uuid: 'profile test uuid',
39-
userUuid: requestMock.user.uuid,
38+
userUuid: userUuidMock,
4039
image: 'www.test.com/image',
4140
nickname: 'test nickname',
4241
};
@@ -45,15 +44,15 @@ describe('ProfilesController', () => {
4544
.spyOn(profilesService, 'findProfileByUserUuid')
4645
.mockResolvedValue(testProfile);
4746

48-
const response = controller.findProfileByUserUuid(requestMock);
47+
const response = controller.findProfileByUserUuid(userUuidMock);
4948

5049
await expect(response).resolves.toEqual({
5150
statusCode: HttpStatus.OK,
5251
message: 'Success',
5352
data: testProfile,
5453
});
5554
expect(profilesService.findProfileByUserUuid).toHaveBeenCalledWith(
56-
requestMock.user.uuid,
55+
userUuidMock,
5756
);
5857
});
5958

@@ -62,15 +61,15 @@ describe('ProfilesController', () => {
6261
.spyOn(profilesService, 'findProfileByUserUuid')
6362
.mockRejectedValue(new NotFoundException());
6463

65-
const response = controller.findProfileByUserUuid(requestMock);
64+
const response = controller.findProfileByUserUuid(userUuidMock);
6665

6766
await expect(response).rejects.toThrow(NotFoundException);
6867
});
6968
});
7069

7170
describe('update', () => {
7271
const imageMock = {} as Express.Multer.File;
73-
const requestMock = { user: { uuid: 'test uuid' } } as RequestWithUser;
72+
const userUuidMock = 'user uuid';
7473
const bodyMock = {
7574
uuid: 'profile test uuid',
7675
nickname: 'test nickname',
@@ -79,7 +78,7 @@ describe('ProfilesController', () => {
7978
it('updated profile', async () => {
8079
const testProfile = {
8180
uuid: 'profile test uuid',
82-
userUuid: requestMock.user.uuid,
81+
userUuid: userUuidMock,
8382
image: 'www.test.com/image',
8483
nickname: 'test nickname',
8584
};
@@ -90,7 +89,7 @@ describe('ProfilesController', () => {
9089

9190
const response = controller.updateProfile(
9291
imageMock,
93-
requestMock,
92+
userUuidMock,
9493
bodyMock,
9594
);
9695

@@ -100,7 +99,7 @@ describe('ProfilesController', () => {
10099
data: testProfile,
101100
});
102101
expect(profilesService.updateProfile).toHaveBeenCalledWith(
103-
requestMock.user.uuid,
102+
userUuidMock,
104103
bodyMock.uuid,
105104
imageMock,
106105
bodyMock,
@@ -114,7 +113,7 @@ describe('ProfilesController', () => {
114113

115114
const response = controller.updateProfile(
116115
imageMock,
117-
requestMock,
116+
userUuidMock,
118117
bodyMock,
119118
);
120119

nestjs-BE/server/src/profiles/profiles.controller.ts

+5-8
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,14 @@ import {
55
Patch,
66
UseInterceptors,
77
UploadedFile,
8-
Request as Req,
98
ValidationPipe,
109
HttpStatus,
1110
} from '@nestjs/common';
1211
import { FileInterceptor } from '@nestjs/platform-express';
1312
import { ApiTags, ApiResponse, ApiOperation } from '@nestjs/swagger';
1413
import { ProfilesService } from './profiles.service';
1514
import { UpdateProfileDto } from './dto/update-profile.dto';
16-
import { RequestWithUser } from '../utils/interface';
15+
import { User } from '../auth/decorators/user.decorator';
1716

1817
@Controller('profiles')
1918
@ApiTags('profiles')
@@ -30,10 +29,8 @@ export class ProfilesController {
3029
status: HttpStatus.UNAUTHORIZED,
3130
description: 'Unauthorized.',
3231
})
33-
async findProfileByUserUuid(@Req() req: RequestWithUser) {
34-
const profile = await this.profilesService.findProfileByUserUuid(
35-
req.user.uuid,
36-
);
32+
async findProfileByUserUuid(@User('uuid') userUuid: string) {
33+
const profile = await this.profilesService.findProfileByUserUuid(userUuid);
3734
return { statusCode: HttpStatus.OK, message: 'Success', data: profile };
3835
}
3936

@@ -50,12 +47,12 @@ export class ProfilesController {
5047
})
5148
async updateProfile(
5249
@UploadedFile() image: Express.Multer.File,
53-
@Req() req: RequestWithUser,
50+
@User('uuid') userUuid: string,
5451
@Body(new ValidationPipe({ whitelist: true }))
5552
updateProfileDto: UpdateProfileDto,
5653
) {
5754
const profile = await this.profilesService.updateProfile(
58-
req.user.uuid,
55+
userUuid,
5956
updateProfileDto.uuid,
6057
image,
6158
updateProfileDto,

nestjs-BE/server/src/spaces/spaces.controller.spec.ts

+22-23
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { SpacesController } from './spaces.controller';
55
import { SpacesService } from './spaces.service';
66
import { UpdateSpaceRequestDto } from './dto/update-space.dto';
77
import { CreateSpaceRequestDto } from './dto/create-space.dto';
8-
import { RequestWithUser } from '../utils/interface';
98

109
describe('SpacesController', () => {
1110
let controller: SpacesController;
@@ -35,10 +34,10 @@ describe('SpacesController', () => {
3534

3635
it('create created', async () => {
3736
const iconMock = { filename: 'icon' } as Express.Multer.File;
38-
const requestMock = { user: { uuid: 'user uuid' } } as RequestWithUser;
37+
const userUuidMock = 'user uuid';
3938
const profileMock = {
4039
uuid: 'profile uuid',
41-
userUuid: requestMock.user.uuid,
40+
userUuid: userUuidMock,
4241
} as Profile;
4342
const bodyMock = {
4443
name: 'new space name',
@@ -48,31 +47,31 @@ describe('SpacesController', () => {
4847

4948
(spacesService.createSpace as jest.Mock).mockResolvedValue(spaceMock);
5049

51-
const response = controller.createSpace(iconMock, bodyMock, requestMock);
50+
const response = controller.createSpace(iconMock, bodyMock, userUuidMock);
5251

5352
await expect(response).resolves.toEqual({
5453
statusCode: HttpStatus.CREATED,
5554
message: 'Created',
5655
data: spaceMock,
5756
});
5857
expect(spacesService.createSpace).toHaveBeenCalledWith(
59-
requestMock.user.uuid,
58+
userUuidMock,
6059
bodyMock.profileUuid,
6160
iconMock,
6261
bodyMock,
6362
);
6463
});
6564

6665
it('create profile uuid needed', async () => {
67-
const requestMock = { user: { uuid: 'user uuid' } } as RequestWithUser;
66+
const userUuidMock = 'user uuid';
6867
const bodyMock = {
6968
name: 'new space name',
7069
} as CreateSpaceRequestDto;
7170

7271
const response = controller.createSpace(
7372
undefined as Express.Multer.File,
7473
bodyMock,
75-
requestMock,
74+
userUuidMock,
7675
);
7776

7877
await expect(response).rejects.toThrow(BadRequestException);
@@ -82,14 +81,14 @@ describe('SpacesController', () => {
8281
it('findOne found space', async () => {
8382
const profileUuid = 'profile uuid';
8483
const spaceMock = { uuid: 'space uuid' } as Space;
85-
const requestMock = { user: { uuid: 'user uuid' } } as RequestWithUser;
84+
const userUuidMock = 'user uuid';
8685

8786
(spacesService.findSpace as jest.Mock).mockResolvedValue(spaceMock);
8887

8988
const response = controller.findSpace(
9089
spaceMock.uuid,
9190
profileUuid,
92-
requestMock,
91+
userUuidMock,
9392
);
9493

9594
await expect(response).resolves.toEqual({
@@ -101,12 +100,12 @@ describe('SpacesController', () => {
101100

102101
it('findOne profile_uuid missing', async () => {
103102
const spaceMock = { uuid: 'space uuid' } as Space;
104-
const requestMock = { user: { uuid: 'user uuid' } } as RequestWithUser;
103+
const userUuidMock = 'user uuid';
105104

106105
const response = controller.findSpace(
107106
spaceMock.uuid,
108107
undefined,
109-
requestMock,
108+
userUuidMock,
110109
);
111110

112111
await expect(response).rejects.toThrow(BadRequestException);
@@ -117,7 +116,7 @@ describe('SpacesController', () => {
117116
const profileUuid = 'profile uuid';
118117
const iconMock = { filename: 'icon' } as Express.Multer.File;
119118
const bodyMock = { name: 'new space name' } as UpdateSpaceRequestDto;
120-
const requestMock = { user: { uuid: 'user uuid' } } as RequestWithUser;
119+
const userUuidMock = 'user uuid';
121120
const spaceMock = { uuid: spaceUuid } as Space;
122121

123122
(spacesService.updateSpace as jest.Mock).mockResolvedValue(spaceMock);
@@ -127,7 +126,7 @@ describe('SpacesController', () => {
127126
spaceUuid,
128127
profileUuid,
129128
bodyMock,
130-
requestMock,
129+
userUuidMock,
131130
);
132131

133132
await expect(response).resolves.toEqual({
@@ -141,14 +140,14 @@ describe('SpacesController', () => {
141140
const iconMock = { filename: 'icon' } as Express.Multer.File;
142141
const spaceUuid = 'space uuid';
143142
const bodyMock = { name: 'new space name' } as UpdateSpaceRequestDto;
144-
const requestMock = { user: { uuid: 'user uuid' } } as RequestWithUser;
143+
const userUuidMock = 'user uuid';
145144

146145
const response = controller.updateSpace(
147146
iconMock,
148147
spaceUuid,
149148
undefined,
150149
bodyMock,
151-
requestMock,
150+
userUuidMock,
152151
);
153152

154153
await expect(response).rejects.toThrow(BadRequestException);
@@ -158,14 +157,14 @@ describe('SpacesController', () => {
158157
it('joinSpace', async () => {
159158
const spaceMock = { uuid: 'space uuid' };
160159
const bodyMock = { profileUuid: 'profile uuid' };
161-
const requestMock = { user: { uuid: 'user uuid' } } as RequestWithUser;
160+
const userUuidMock = 'user uuid';
162161

163162
(spacesService.joinSpace as jest.Mock).mockResolvedValue(spaceMock);
164163

165164
const response = controller.joinSpace(
166165
spaceMock.uuid,
167166
bodyMock,
168-
requestMock,
167+
userUuidMock,
169168
);
170169

171170
await expect(response).resolves.toEqual({
@@ -178,14 +177,14 @@ describe('SpacesController', () => {
178177
it('leaveSpace', async () => {
179178
const spaceMock = { uuid: 'space uuid' };
180179
const profileMock = { uuid: 'profile uuid' };
181-
const requestMock = { user: { uuid: 'user uuid' } } as RequestWithUser;
180+
const userUuidMock = 'user uuid';
182181

183182
(spacesService.leaveSpace as jest.Mock).mockResolvedValue(undefined);
184183

185184
const response = controller.leaveSpace(
186185
spaceMock.uuid,
187186
profileMock.uuid,
188-
requestMock,
187+
userUuidMock,
189188
);
190189

191190
await expect(response).resolves.toEqual({
@@ -197,7 +196,7 @@ describe('SpacesController', () => {
197196
it('findProfilesInSpace', async () => {
198197
const spaceMock = { uuid: 'space uuid' };
199198
const profileMock = { uuid: 'profile uuid' };
200-
const requestMock = { user: { uuid: 'user uuid' } } as RequestWithUser;
199+
const userUuidMock = 'user uuid';
201200
const profilesMock = [];
202201

203202
(spacesService.findProfilesInSpace as jest.Mock).mockResolvedValue(
@@ -207,7 +206,7 @@ describe('SpacesController', () => {
207206
const response = controller.findProfilesInSpace(
208207
spaceMock.uuid,
209208
profileMock.uuid,
210-
requestMock,
209+
userUuidMock,
211210
);
212211

213212
await expect(response).resolves.toEqual({
@@ -219,14 +218,14 @@ describe('SpacesController', () => {
219218

220219
it('findProfilesInSpace space uuid needed', async () => {
221220
const spaceMock = { uuid: 'space uuid' };
222-
const requestMock = { user: { uuid: 'user uuid' } } as RequestWithUser;
221+
const userUuidMock = 'user uuid';
223222

224223
(spacesService.findProfilesInSpace as jest.Mock).mockResolvedValue([]);
225224

226225
const response = controller.findProfilesInSpace(
227226
spaceMock.uuid,
228227
undefined,
229-
requestMock,
228+
userUuidMock,
230229
);
231230

232231
await expect(response).rejects.toThrow(BadRequestException);

0 commit comments

Comments
 (0)