Skip to content

Commit 8748ebf

Browse files
authored
feat: Send message when a user registers or creates a group (#386)
1 parent 84299f2 commit 8748ebf

File tree

6 files changed

+66
-0
lines changed

6 files changed

+66
-0
lines changed

src/main/java/com/gamzabat/algohub/auth/service/OAuth2Service.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import com.gamzabat.algohub.auth.exception.GithubApiException;
2929
import com.gamzabat.algohub.common.jwt.TokenProvider;
3030
import com.gamzabat.algohub.common.jwt.dto.JwtDTO;
31+
import com.gamzabat.algohub.common.logging.DiscordWebhookService;
3132
import com.gamzabat.algohub.constants.ApiConstants;
3233
import com.gamzabat.algohub.enums.Role;
3334
import com.gamzabat.algohub.feature.user.domain.User;
@@ -48,6 +49,7 @@ public class OAuth2Service {
4849
private String secretKey;
4950
private final RestTemplate restTemplate;
5051
private final UserRepository userRepository;
52+
private final DiscordWebhookService webhookService;
5153

5254
@Transactional
5355
public TokenResponse githubSignIn(String code) {
@@ -79,6 +81,8 @@ private void register(GithubUserDto githubUser) {
7981
.build());
8082
newUser.editNickname(createTemporaryNickname(githubUser.getLogin(), newUser.getId()));
8183
newUser.editGithubName(githubUser.getLogin());
84+
85+
webhookService.sendRegisterMessage(newUser.getNickname(), "Github", newUser.getId());
8286
}
8387

8488
private String createTemporaryNickname(String login, Long id) {
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.gamzabat.algohub.common.logging;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
6+
import org.springframework.beans.factory.annotation.Value;
7+
import org.springframework.stereotype.Service;
8+
import org.springframework.util.StringUtils;
9+
import org.springframework.web.client.RestTemplate;
10+
11+
import lombok.RequiredArgsConstructor;
12+
import lombok.extern.slf4j.Slf4j;
13+
14+
@Service
15+
@RequiredArgsConstructor
16+
@Slf4j
17+
public class DiscordWebhookService {
18+
@Value("${noti_url:}")
19+
private String webhookUrl;
20+
21+
private final RestTemplate restTemplate;
22+
23+
public void sendRegisterMessage(String username, String type, Long sid) {
24+
String content = username + " 님이 " + type + " 방식으로 " + sid + "번째로 회원가입 하셨습니다!! 🎉";
25+
this.send(content);
26+
}
27+
28+
public void sendCreateGroupMessage(String username, String groupName) {
29+
String content = username + " 님이 " + groupName + " 그룹을 생성하셨습니다 😎";
30+
this.send(content);
31+
}
32+
33+
private void send(String message) {
34+
try {
35+
if (!StringUtils.hasText(webhookUrl)) {
36+
log.debug("No webhook url provided");
37+
return;
38+
}
39+
Map<String, String> payload = new HashMap<>();
40+
payload.put("content", message);
41+
restTemplate.postForObject(webhookUrl, payload, String.class);
42+
log.info("Webhook sent: {}", message);
43+
} catch (Exception e) {
44+
log.error("Error sending webhook message", e);
45+
}
46+
}
47+
48+
}

src/main/java/com/gamzabat/algohub/feature/group/studygroup/service/StudyGroupService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.springframework.web.multipart.MultipartFile;
1818

1919
import com.aventrix.jnanoid.jnanoid.NanoIdUtils;
20+
import com.gamzabat.algohub.common.logging.DiscordWebhookService;
2021
import com.gamzabat.algohub.constants.BOJResultConstants;
2122
import com.gamzabat.algohub.enums.ImageType;
2223
import com.gamzabat.algohub.exception.StudyGroupValidationException;
@@ -88,6 +89,7 @@ public class StudyGroupService {
8889
private final ObjectProvider<StudyGroupService> studyGroupServiceProvider;
8990
private final NotificationSettingRepository notificationSettingRepository;
9091
private final NotificationService notificationService;
92+
private final DiscordWebhookService webhookService;
9193

9294
@Transactional
9395
public GroupCodeResponse createGroup(User user, CreateGroupRequest request, MultipartFile profileImage) {
@@ -122,6 +124,8 @@ public GroupCodeResponse createGroup(User user, CreateGroupRequest request, Mult
122124

123125
saveGroupImage(profileImage, group);
124126
log.info("success to save study group user_id={}", user.getId());
127+
128+
webhookService.sendCreateGroupMessage(user.getNickname(), group.getName());
125129
return new GroupCodeResponse(inviteCode);
126130
}
127131

src/main/java/com/gamzabat/algohub/feature/user/service/UserService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import com.gamzabat.algohub.common.jwt.TokenProvider;
2828
import com.gamzabat.algohub.common.jwt.dto.JwtDTO;
2929
import com.gamzabat.algohub.common.jwt.dto.ReissueTokenRequest;
30+
import com.gamzabat.algohub.common.logging.DiscordWebhookService;
3031
import com.gamzabat.algohub.common.redis.RedisService;
3132
import com.gamzabat.algohub.enums.EmailType;
3233
import com.gamzabat.algohub.enums.ImageType;
@@ -74,6 +75,7 @@ public class UserService {
7475
private final RestTemplate restTemplate;
7576
private final ResetPasswordRepository resetPasswordRepository;
7677
private final EmailService emailService;
78+
private final DiscordWebhookService webhookService;
7779

7880
@Transactional
7981
public void register(RegisterRequest request, MultipartFile profileImage, String token) {
@@ -94,6 +96,8 @@ public void register(RegisterRequest request, MultipartFile profileImage, String
9496

9597
saveProfileImage(profileImage, user);
9698
log.info("success to register user_id={}", user.getId());
99+
100+
webhookService.sendRegisterMessage(user.getNickname(), "SignUp", user.getId());
97101
}
98102

99103
private void saveProfileImage(MultipartFile profileImage, User user) {

src/test/java/com/gamzabat/algohub/feature/user/service/UserServiceTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737

3838
import com.gamzabat.algohub.common.jwt.TokenProvider;
3939
import com.gamzabat.algohub.common.jwt.dto.JwtDTO;
40+
import com.gamzabat.algohub.common.logging.DiscordWebhookService;
4041
import com.gamzabat.algohub.common.redis.RedisService;
4142
import com.gamzabat.algohub.enums.EmailType;
4243
import com.gamzabat.algohub.enums.ImageType;
@@ -90,6 +91,8 @@ class UserServiceTest {
9091
private ResetPasswordRepository resetPasswordRepository;
9192
@Mock
9293
private EmailService emailService;
94+
@Mock
95+
private DiscordWebhookService webhookService;
9396
@Captor
9497
private ArgumentCaptor<User> userCaptor;
9598
@Captor

src/test/java/com/gamzabat/algohub/service/StudyGroupServiceTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.springframework.mock.web.MockMultipartFile;
2525

2626
import com.gamzabat.algohub.common.DateFormatUtil;
27+
import com.gamzabat.algohub.common.logging.DiscordWebhookService;
2728
import com.gamzabat.algohub.enums.ImageType;
2829
import com.gamzabat.algohub.enums.Role;
2930
import com.gamzabat.algohub.exception.StudyGroupValidationException;
@@ -97,6 +98,8 @@ class StudyGroupServiceTest {
9798
@Mock
9899
private SolutionCommentRepository solutionCommentRepository;
99100
@Mock
101+
private DiscordWebhookService webhookService;
102+
@Mock
100103
private RankingRepository rankingRepository;
101104
@Mock
102105
private ObjectProvider<StudyGroupService> studyGroupServiceObjectProvider;

0 commit comments

Comments
 (0)