Skip to content

Commit 41c4a8a

Browse files
authored
Merge pull request #202 from Team-HMH/refactor/#195-slack-alarm-message
refactor - μŠ¬λž™ λ©”μ‹œμ§€ ν˜•μ‹ λ¦¬νŒ©ν† λ§μœΌλ‘œ 가독성 ν–₯상
2 parents 41988b7 + 7332004 commit 41c4a8a

File tree

6 files changed

+53
-25
lines changed

6 files changed

+53
-25
lines changed

β€Žsrc/main/java/sopt/org/hmh/domain/auth/service/AuthFacade.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import sopt.org.hmh.domain.auth.dto.response.ReissueResponse;
77
import sopt.org.hmh.domain.challenge.dto.request.NewChallengeOrder;
88
import sopt.org.hmh.domain.challenge.service.ChallengeFacade;
9+
import sopt.org.hmh.domain.slack.builder.NewUserSlackMessageBuilder;
10+
import sopt.org.hmh.domain.slack.constant.SlackStatus;
911
import sopt.org.hmh.domain.user.domain.User;
1012
import sopt.org.hmh.domain.auth.dto.request.SocialSignUpRequest;
1113
import sopt.org.hmh.domain.auth.dto.response.LoginResponse;
@@ -27,6 +29,7 @@ public class AuthFacade {
2729
private final ChallengeFacade challengeFacade;
2830
private final TokenService tokenService;
2931
private final UserService userService;
32+
private final NewUserSlackMessageBuilder newUserSlackMessageBuilder;
3033

3134
@Transactional(readOnly = true)
3235
public LoginResponse login(String socialAccessToken, SocialPlatform socialPlatform) {
@@ -41,7 +44,7 @@ public LoginResponse signup(SocialSignUpRequest request, String socialAccessToke
4144
SocialPlatform socialPlatform = request.socialPlatform();
4245
String socialId = this.getSocialIdBySocialAccessToken(socialPlatform, socialAccessToken);
4346

44-
User newUser = userService.addUser(socialPlatform, socialId, request.name(), os);
47+
User newUser = userService.addUser(socialPlatform, socialId, request.name());
4548
Long newUserId = newUser.getId();
4649

4750
userService.registerOnboardingInfo(request, newUserId);
@@ -51,6 +54,8 @@ public LoginResponse signup(SocialSignUpRequest request, String socialAccessToke
5154
newUserId, os, timeZone
5255
));
5356

57+
newUserSlackMessageBuilder.sendNotification(SlackStatus.NEW_USER_SIGNUP, request.name(), os);
58+
5459
return performLogin(newUser, socialAccessToken, socialPlatform);
5560
}
5661

β€Žsrc/main/java/sopt/org/hmh/domain/slack/SlackSender.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ public class SlackSender {
1717

1818
private final Slack slackClient = Slack.getInstance();
1919

20-
public void sendSlackNotification(String webhookUrl, String title, Attachment attachment) {
20+
public void sendSlackNotification(String webhookUrl, String mainText, Attachment attachment) {
2121
try {
2222
slackClient.send(webhookUrl, WebhookPayloads.payload(p -> p
23-
.text(title)
23+
.text("*" + mainText + "*")
2424
.attachments(List.of(attachment))
2525
));
2626
} catch (IOException slackError) {
Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,24 @@
11
package sopt.org.hmh.domain.slack.builder;
22

33
import com.slack.api.model.Attachment;
4+
import jakarta.servlet.ServletException;
45
import jakarta.servlet.http.HttpServletRequest;
56
import lombok.RequiredArgsConstructor;
67
import org.springframework.beans.factory.annotation.Value;
8+
import org.springframework.http.HttpStatus;
79
import org.springframework.stereotype.Component;
10+
import sopt.org.hmh.domain.auth.exception.AuthError;
811
import sopt.org.hmh.domain.slack.SlackSender;
912
import sopt.org.hmh.domain.slack.constant.SlackStatus;
13+
import sopt.org.hmh.global.auth.jwt.exception.JwtError;
14+
import sopt.org.hmh.global.common.exception.base.ErrorBase;
15+
import sopt.org.hmh.global.common.exception.base.ExceptionBase;
1016

1117
import java.time.LocalDateTime;
1218
import java.time.format.DateTimeFormatter;
1319
import java.util.List;
20+
import java.util.Objects;
21+
import java.util.Set;
1422

1523
@Component
1624
@RequiredArgsConstructor
@@ -21,25 +29,46 @@ public class ErrorSlackMessageBuilder implements SlackMessageBuilder {
2129

2230
private final SlackSender slackSender;
2331

24-
public void sendNotification(SlackStatus status, Exception e, HttpServletRequest request) {
25-
slackSender.sendSlackNotification(serverErrorWebUrl, status.getTitle(),
26-
generateSlackAttachment(status, e, request));
32+
private static final Set<String> EXCLUDED_ERROR_MESSAGES = Set.of(
33+
JwtError.INVALID_ACCESS_TOKEN.getErrorMessage(),
34+
JwtError.INVALID_SOCIAL_ACCESS_TOKEN.getErrorMessage(),
35+
AuthError.NOT_SIGNUP_USER.getErrorMessage(),
36+
AuthError.DUPLICATE_USER.getErrorMessage()
37+
);
38+
39+
private boolean shouldSendNotification(ErrorBase e) {
40+
return !EXCLUDED_ERROR_MESSAGES.contains(e.getErrorMessage());
41+
}
42+
43+
public void sendNotification(SlackStatus status, Exception exception, HttpServletRequest request) {
44+
if (exception instanceof ExceptionBase) {
45+
ErrorBase error = ((ExceptionBase) exception).getError();
46+
if (shouldSendNotification(error)) {
47+
sendSlackNotification(status, error.getHttpStatus(), error.getErrorMessage(), request);
48+
}
49+
} else if (exception instanceof ServletException) {
50+
sendSlackNotification(status, HttpStatus.INTERNAL_SERVER_ERROR, exception.getMessage(), request);
51+
}
52+
}
53+
54+
private void sendSlackNotification(SlackStatus status, HttpStatus statusCode, String errorMessage, HttpServletRequest request) {
55+
slackSender.sendSlackNotification(serverErrorWebUrl,
56+
status.getTitle() + " : " + statusCode,
57+
generateSlackAttachment(status, errorMessage, request));
2758
}
2859

2960
@Override
3061
public Attachment generateSlackAttachment(SlackStatus status, Object... params) {
31-
Exception e = (Exception) params[0];
62+
String errorMessage = (String) params[0];
3263
HttpServletRequest request = (HttpServletRequest) params[1];
33-
3464
String requestTime = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS").format(LocalDateTime.now());
35-
3665
return Attachment.builder()
3766
.color(changeColorToHex(status.getColor()))
38-
.title(requestTime + " λ°œμƒ 였λ₯˜ 둜그")
67+
.text(requestTime + " λ°œμƒ")
3968
.fields(List.of(
4069
generateSlackField("User Info", "- ID : " + request.getRemoteUser()),
4170
generateSlackField("Request URL", "[" + request.getMethod() + "] " + request.getRequestURI()),
42-
generateSlackField("Error Info", e.getMessage())))
71+
generateSlackField("Error Message", errorMessage)))
4372
.build();
4473
}
4574
}

β€Žsrc/main/java/sopt/org/hmh/domain/slack/builder/NewUserSlackMessageBuilder.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public class NewUserSlackMessageBuilder implements SlackMessageBuilder{
2323
public void sendNotification(SlackStatus status, String userName, String os) {
2424
slackSender.sendSlackNotification(
2525
newUserWebUrl,
26-
status.getTitle(),
26+
status.getTitle() + " : νšŒμ› 수 " + userRepository.count() + "λͺ…",
2727
generateSlackAttachment(status, userName, os));
2828
}
2929

@@ -34,10 +34,9 @@ public Attachment generateSlackAttachment(SlackStatus status, Object... params)
3434

3535
return Attachment.builder()
3636
.color(changeColorToHex(status.getColor()))
37-
.title("μƒˆλ‘œμš΄ μœ μ € '" + userName + "'λ‹˜μ΄ κ°€μž…ν–ˆμŠ΅λ‹ˆλ‹€!")
3837
.fields(List.of(
39-
generateSlackField("총 μœ μ € 수", " πŸ‘‰ " + userRepository.count() + "λͺ…"),
40-
generateSlackField("κ°€μž…ν•œ OS", "πŸ‘‰ " + os)))
38+
generateSlackField("User Name", userName),
39+
generateSlackField("User OS", os)))
4140
.build();
4241
}
4342
}

β€Žsrc/main/java/sopt/org/hmh/domain/slack/constant/SlackStatus.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
@Getter
77
@RequiredArgsConstructor
88
public enum SlackStatus {
9-
NEW_USER_SIGNUP(java.awt.Color.GREEN, "πŸŽ‰ μ‹ κ·œ μœ μ € νšŒμ› κ°€μž… λ°œμƒ"),
10-
INTERNAL_ERROR(java.awt.Color.ORANGE, "🚨 μ„œλ²„ λ‚΄λΆ€ μ—λŸ¬ λ°œμƒ"),
11-
CLIENT_ERROR(java.awt.Color.RED, "😭 μ„œλ²„ 였λ₯˜ λ°œμƒ");
9+
NEW_USER_SIGNUP(java.awt.Color.GREEN, "πŸŽ‰ μ‹ κ·œ μœ μ €"),
10+
INTERNAL_ERROR(java.awt.Color.ORANGE, "🚨 μ„œλ²„ λ‚΄λΆ€ μ—λŸ¬"),
11+
CLIENT_ERROR(java.awt.Color.RED, "😭 μ„œλ²„ 였λ₯˜");
1212

1313
private final java.awt.Color color;
1414
private final String title;

β€Žsrc/main/java/sopt/org/hmh/domain/user/service/UserService.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@
1313
import sopt.org.hmh.domain.auth.exception.AuthException;
1414
import sopt.org.hmh.domain.auth.repository.OnboardingInfoRepository;
1515
import sopt.org.hmh.domain.auth.repository.ProblemRepository;
16-
import sopt.org.hmh.domain.slack.builder.NewUserSlackMessageBuilder;
17-
import sopt.org.hmh.domain.slack.constant.SlackStatus;
1816
import sopt.org.hmh.domain.user.domain.User;
1917
import sopt.org.hmh.domain.user.domain.UserConstants;
2018
import sopt.org.hmh.domain.user.domain.exception.UserError;
@@ -31,7 +29,6 @@ public class UserService {
3129
private final UserRepository userRepository;
3230
private final OnboardingInfoRepository onboardingInfoRepository;
3331
private final ProblemRepository problemRepository;
34-
private final NewUserSlackMessageBuilder newUserSlackMessageBuilder;
3532

3633
@Transactional
3734
public void withdraw(Long userId) {
@@ -59,17 +56,15 @@ public void validateDuplicateUser(String socialId, SocialPlatform socialPlatform
5956
}
6057
}
6158

62-
public User addUser(SocialPlatform socialPlatform, String socialId, String name, String os) {
59+
public User addUser(SocialPlatform socialPlatform, String socialId, String name) {
6360
this.validateDuplicateUser(socialId, socialPlatform);
64-
User user = userRepository.save(
61+
return userRepository.save(
6562
User.builder()
6663
.socialPlatform(socialPlatform)
6764
.socialId(socialId)
6865
.name(validateName(name))
6966
.build()
7067
);
71-
newUserSlackMessageBuilder.sendNotification(SlackStatus.NEW_USER_SIGNUP, name, os);
72-
return user;
7368
}
7469

7570
private String validateName(String name) {

0 commit comments

Comments
Β (0)