Skip to content

Commit 603e954

Browse files
refactor: 컨트롤러에서 반복되는 에러처리 로직 제거
Co-Authored-By: 조영우 <[email protected]>
1 parent c9b53d6 commit 603e954

File tree

3 files changed

+62
-123
lines changed

3 files changed

+62
-123
lines changed

backend/src/auth/controller/auth.controller.ts

+52-97
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import {
22
Body,
33
Controller,
44
Get,
5-
InternalServerErrorException,
65
Post,
76
Req,
87
Res,
@@ -39,34 +38,23 @@ export class AuthController {
3938
@Body() body: GithubAuthenticationRequestDto,
4039
@Res() response: Response,
4140
) {
42-
try {
43-
const result = await this.authService.githubAuthentication(body.authCode);
44-
if ('accessToken' in result && 'refreshToken' in result) {
45-
const { accessToken, refreshToken } = result;
46-
const { username, githubImageUrl } =
47-
await this.memberService.getMemberPublicInfo(accessToken);
48-
const responseBody = {
49-
accessToken,
50-
member: { username, imageUrl: githubImageUrl },
51-
};
52-
return response
53-
.status(201)
54-
.cookie('refreshToken', refreshToken, this.cookieOptions)
55-
.send(responseBody);
56-
} else if ('tempIdToken' in result) {
57-
const responseBody = { tempIdToken: result.tempIdToken };
58-
return response.status(209).send(responseBody);
59-
} else
60-
throw new Error('assert: unexpected authentication result returned');
61-
} catch (err) {
62-
if (
63-
err.message === 'Cannot retrieve access token' ||
64-
err.message === 'Cannot retrieve github user'
65-
) {
66-
throw new UnauthorizedException('Invalid authorization code');
67-
}
68-
throw new InternalServerErrorException(err.message);
69-
}
41+
const result = await this.authService.githubAuthentication(body.authCode);
42+
if ('accessToken' in result && 'refreshToken' in result) {
43+
const { accessToken, refreshToken } = result;
44+
const { username, githubImageUrl } =
45+
await this.memberService.getMemberPublicInfo(accessToken);
46+
const responseBody = {
47+
accessToken,
48+
member: { username, imageUrl: githubImageUrl },
49+
};
50+
return response
51+
.status(201)
52+
.cookie('refreshToken', refreshToken, this.cookieOptions)
53+
.send(responseBody);
54+
} else if ('tempIdToken' in result) {
55+
const responseBody = { tempIdToken: result.tempIdToken };
56+
return response.status(209).send(responseBody);
57+
} else throw new Error('assert: unexpected authentication result returned');
7058
}
7159

7260
@Post('github/signup')
@@ -78,32 +66,24 @@ export class AuthController {
7866
const tempIdToken = request.token;
7967
if (!tempIdToken)
8068
throw new UnauthorizedException('Bearer Token is missing');
81-
try {
82-
const { accessToken, refreshToken } = await this.authService.githubSignup(
83-
tempIdToken,
84-
body.username,
85-
body.position,
86-
{ stacks: body.techStack },
87-
);
88-
const { username, githubImageUrl } =
89-
await this.memberService.getMemberPublicInfo(accessToken);
90-
const responseBody = {
91-
accessToken,
92-
member: { username, imageUrl: githubImageUrl },
93-
};
94-
return response
95-
.status(201)
96-
.cookie('refreshToken', refreshToken, this.cookieOptions)
97-
.send(responseBody);
98-
} catch (err) {
99-
if (
100-
err.message === 'Failed to verify token' ||
101-
err.message === 'tempIdToken does not match'
102-
) {
103-
throw new UnauthorizedException('Expired:tempIdToken');
104-
}
105-
throw new InternalServerErrorException(err.message);
106-
}
69+
70+
const { accessToken, refreshToken } = await this.authService.githubSignup(
71+
tempIdToken,
72+
body.username,
73+
body.position,
74+
{ stacks: body.techStack },
75+
);
76+
const { username, githubImageUrl } =
77+
await this.memberService.getMemberPublicInfo(accessToken);
78+
const responseBody = {
79+
accessToken,
80+
member: { username, imageUrl: githubImageUrl },
81+
};
82+
83+
return response
84+
.status(201)
85+
.cookie('refreshToken', refreshToken, this.cookieOptions)
86+
.send(responseBody);
10787
}
10888

10989
@Post('logout')
@@ -112,17 +92,8 @@ export class AuthController {
11292
if (!accessToken)
11393
throw new UnauthorizedException('Bearer Token is missing');
11494

115-
try {
116-
await this.authService.logout(accessToken);
117-
} catch (err) {
118-
if (err.message === 'Not a logged in member') {
119-
throw new UnauthorizedException('Not a logged in member');
120-
}
121-
if (err.message === 'Failed to verify token') {
122-
throw new UnauthorizedException('Expired:accessToken');
123-
}
124-
throw new InternalServerErrorException(err.message);
125-
}
95+
await this.authService.logout(accessToken);
96+
12697
return response
12798
.clearCookie('refreshToken', this.cookieOptions)
12899
.status(200)
@@ -135,43 +106,27 @@ export class AuthController {
135106
if (!requestRefreshToken) {
136107
throw new UnauthorizedException('Refresh Token is missing');
137108
}
138-
try {
139-
const { accessToken, refreshToken } =
140-
await this.authService.refreshAccessTokenAndRefreshToken(
141-
requestRefreshToken,
142-
);
143-
return response
144-
.status(201)
145-
.cookie('refreshToken', refreshToken, this.cookieOptions)
146-
.send({ accessToken });
147-
} catch (err) {
148-
if (
149-
err.message === 'No matching refresh token' ||
150-
err.message === 'Failed to verify token'
151-
) {
152-
throw new UnauthorizedException('Expired:refreshToken');
153-
}
154-
throw new InternalServerErrorException(err.message);
155-
}
109+
110+
const { accessToken, refreshToken } =
111+
await this.authService.refreshAccessTokenAndRefreshToken(
112+
requestRefreshToken,
113+
);
114+
115+
return response
116+
.status(201)
117+
.cookie('refreshToken', refreshToken, this.cookieOptions)
118+
.send({ accessToken });
156119
}
157120

158121
@Get('/github/username')
159122
async getGithubUsername(@Req() request: BearerTokenRequest) {
160123
const tempIdToken = request.token;
161124
if (!tempIdToken)
162125
throw new UnauthorizedException('Bearer Token is missing');
163-
try {
164-
const githubUsername =
165-
await this.authService.getGithubUsernameByTempIdToken(tempIdToken);
166-
return { githubUsername };
167-
} catch (err) {
168-
if (
169-
err.message === 'Failed to verify token' ||
170-
err.message === 'tempIdToken does not match'
171-
) {
172-
throw new UnauthorizedException('Expired:tempIdToken');
173-
}
174-
throw new InternalServerErrorException(err.message);
175-
}
126+
127+
const githubUsername =
128+
await this.authService.getGithubUsernameByTempIdToken(tempIdToken);
129+
130+
return { githubUsername };
176131
}
177132
}

backend/src/member/controller/member.controller.ts

+5-11
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import {
33
Get,
44
Query,
55
BadRequestException,
6-
InternalServerErrorException,
76
Req,
87
UnauthorizedException,
98
} from '@nestjs/common';
@@ -22,22 +21,17 @@ export class MemberController {
2221
} catch (err) {
2322
if (err.message === 'duplicate username')
2423
return { available: false, message: err.message };
25-
throw new InternalServerErrorException(err.message);
2624
}
2725
}
26+
2827
@Get('/')
2928
async getMember(@Req() request: BearerTokenRequest) {
3029
const accessToken = request.token;
3130
if (!accessToken)
3231
throw new UnauthorizedException('Bearer Token is missing');
33-
try {
34-
const { username, githubImageUrl } =
35-
await this.memberService.getMemberPublicInfo(accessToken);
36-
return { username, imageUrl: githubImageUrl };
37-
} catch (err) {
38-
if (err.message === 'Failed to verify token')
39-
throw new UnauthorizedException('Expired:accessToken');
40-
throw new InternalServerErrorException(err.message);
41-
}
32+
33+
const { username, githubImageUrl } =
34+
await this.memberService.getMemberPublicInfo(accessToken);
35+
return { username, imageUrl: githubImageUrl };
4236
}
4337
}
+5-15
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
1-
import {
2-
Controller,
3-
Get,
4-
Req,
5-
UnauthorizedException,
6-
InternalServerErrorException,
7-
} from '@nestjs/common';
1+
import { Controller, Get, Req, UnauthorizedException } from '@nestjs/common';
82
import { projectFixtures } from 'fixtures/project-fixtures';
93
import { BearerTokenRequest } from 'src/common/middleware/parse-bearer-token.middleware';
104

@@ -18,14 +12,10 @@ export class ProjectController {
1812
const accessToken = request.token;
1913
if (!accessToken)
2014
throw new UnauthorizedException('Bearer Token is missing');
21-
try {
22-
// access token 검증을 위한 임시 로직
23-
await this.lesserJwtService.getPayload(accessToken, 'access');
24-
} catch (err) {
25-
if (err.message === 'Failed to verify token')
26-
throw new UnauthorizedException('Expired:accessToken');
27-
throw new InternalServerErrorException(err.message);
28-
}
15+
16+
// access token 검증을 위한 임시 로직
17+
await this.lesserJwtService.getPayload(accessToken, 'access');
18+
2919
return { projects: projectFixtures };
3020
}
3121
}

0 commit comments

Comments
 (0)