Skip to content

Commit 158e146

Browse files
committed
feature: discord 관리자 qr전송 기능 추가
1 parent 8512690 commit 158e146

File tree

3 files changed

+60
-1
lines changed

3 files changed

+60
-1
lines changed

linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessage.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.List;
44

5+
import com.fasterxml.jackson.annotation.JsonProperty;
56
import lombok.AccessLevel;
67
import lombok.AllArgsConstructor;
78
import lombok.Builder;
@@ -25,5 +26,19 @@ public static class Embed {
2526

2627
private String title;
2728
private String description;
29+
private EmbedImage image;
30+
}
31+
@Builder
32+
@AllArgsConstructor(access = AccessLevel.PROTECTED)
33+
@NoArgsConstructor(access = AccessLevel.PROTECTED)
34+
@Getter
35+
public static class EmbedImage{
36+
37+
private String url;
38+
@JsonProperty(value = "proxy_url")
39+
private String proxyUrl;
40+
41+
private Integer height;
42+
private Integer width;
2843
}
2944
}

linkmind/src/main/java/com/app/toaster/external/client/discord/DiscordMessageProvider.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.app.toaster.external.client.discord;
22

3+
import java.io.IOException;
34
import java.io.PrintWriter;
45
import java.io.StringWriter;
56
import java.net.URI;
@@ -9,6 +10,7 @@
910

1011
import org.springframework.beans.factory.annotation.Value;
1112
import org.springframework.core.env.Environment;
13+
import org.springframework.core.io.ByteArrayResource;
1214
import org.springframework.stereotype.Component;
1315
import org.springframework.transaction.event.TransactionPhase;
1416
import org.springframework.transaction.event.TransactionalEventListener;
@@ -20,6 +22,7 @@
2022
import jakarta.servlet.http.HttpServletRequest;
2123
import lombok.RequiredArgsConstructor;
2224
import lombok.extern.slf4j.Slf4j;
25+
import org.springframework.web.multipart.MultipartFile;
2326

2427
@RequiredArgsConstructor
2528
@Component
@@ -43,6 +46,19 @@ public void sendNotification(NotificationDto notification) {
4346
switch (notification.type()){
4447
case ERROR -> discordClient.sendMessage(URI.create(webhookUrlError), createErrorMessage(notification.e(), notification.request()));
4548
case SIGNUP -> discordClient.sendMessage(URI.create(webhookUrlSign), createSignUpMessage());
49+
case ADMIN -> discordClient.sendMessage(URI.create(webhookUrlError), createAdminMessage(notification.request()));
50+
}
51+
} catch (Exception error) {
52+
log.warn("discord notification fail : " + error);
53+
}
54+
}
55+
}
56+
57+
public void sendAdmin(NotificationDto notification) {
58+
if (!Arrays.asList(environment.getActiveProfiles()).contains("local")) { // 일단 로컬 막아두겠습니다. TODO: 웹훅 주소 바꾸기
59+
try {
60+
switch (notification.type()){
61+
case ADMIN -> discordClient.sendMessage(URI.create(webhookUrlError), createAdminMessage(notification.request()));
4662
}
4763
} catch (Exception error) {
4864
log.warn("discord notification fail : " + error);
@@ -95,6 +111,33 @@ private DiscordMessage createErrorMessage(Exception e, String requestUrl) {
95111
.build();
96112
}
97113

114+
private DiscordMessage createAdminMessage(String file) throws IOException {
115+
return DiscordMessage.builder()
116+
.content("# 😍스웨거 MFA 만들어보기")
117+
.embeds(
118+
List.of(
119+
DiscordMessage.Embed.builder()
120+
.title("ℹ️ 에러 정보")
121+
.description(
122+
"### 🕖 발생 시간\n"
123+
+ LocalDateTime.now()
124+
+ "\n"
125+
+ "### 🔗 요청 URL\n"
126+
+ "스웨거 테스트"
127+
+ "\n"
128+
+ "### 📄 Stack Trace\n"
129+
+ "\n```")
130+
.image(DiscordMessage.EmbedImage.builder()
131+
.url(file)
132+
.height(300)
133+
.width(300)
134+
.build()
135+
).build()
136+
)
137+
)
138+
.build();
139+
}
140+
98141
private String createRequestFullPath(WebRequest webRequest) {
99142
HttpServletRequest request = ((ServletWebRequest) webRequest).getRequest();
100143
String fullPath = request.getMethod() + " " + request.getRequestURL();

linkmind/src/main/java/com/app/toaster/external/client/discord/NotificationType.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@
22

33
public enum NotificationType {
44
ERROR,
5-
SIGNUP
5+
SIGNUP,
6+
ADMIN
67
}

0 commit comments

Comments
 (0)