Skip to content

Commit fd7e205

Browse files
authored
Merge 0.5.2 to develop (#43)
2 parents 095d74d + b2f774c commit fd7e205

22 files changed

Lines changed: 402 additions & 21 deletions

api-payload/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<groupId>org.namul</groupId>
88
<artifactId>beginner</artifactId>
9-
<version>0.5.1</version>
9+
<version>0.5.2</version>
1010
</parent>
1111

1212
<artifactId>api-payload</artifactId>

api-payload/src/main/java/org/namul/api/payload/config/DiscordSenderAutoConfiguration.java

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

33
import org.namul.api.payload.message.DiscordExceptionAdviceMessageSender;
44
import org.namul.api.payload.message.DiscordExceptionAdviceUtil;
5-
import org.namul.api.payload.properties.DiscordProperties;
5+
import org.namul.api.payload.properties.DiscordExceptionAdviceProperties;
66
import org.springframework.boot.autoconfigure.AutoConfiguration;
77
import org.springframework.context.annotation.Bean;
88

@@ -15,7 +15,7 @@ DiscordExceptionAdviceUtil discordUtil() {
1515
}
1616

1717
@Bean
18-
DiscordExceptionAdviceMessageSender discordExceptionAdviceMessageSender(DiscordProperties discordProperties) {
19-
return new DiscordExceptionAdviceMessageSender(discordUtil(), discordProperties);
18+
DiscordExceptionAdviceMessageSender discordExceptionAdviceMessageSender(DiscordExceptionAdviceProperties discordExceptionAdviceProperties) {
19+
return new DiscordExceptionAdviceMessageSender(discordUtil(), discordExceptionAdviceProperties);
2020
}
2121
}

api-payload/src/main/java/org/namul/api/payload/config/ExceptionAdviceAutoConfiguration.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,9 @@
55
import org.namul.api.payload.error.configurer.ExceptionAdviceConfigurer;
66
import org.namul.api.payload.log.DefaultExceptionAdviceLogger;
77
import org.namul.api.payload.log.ExceptionAdviceLogger;
8-
import org.namul.api.payload.message.DiscordExceptionAdviceMessage;
9-
import org.namul.api.payload.message.DiscordExceptionAdviceMessageSender;
10-
import org.namul.api.payload.message.ExceptionAdviceMessageManager;
11-
import org.namul.api.payload.message.ExceptionAdviceMessageSender;
8+
import org.namul.api.payload.message.*;
129
import org.namul.api.payload.message.generator.DefaultDiscordExceptionAdviceMessageGenerator;
10+
import org.namul.api.payload.message.generator.DefaultSlackExceptionAdviceMessageGenerator;
1311
import org.namul.api.payload.message.generator.ExceptionAdviceMessageGenerator;
1412
import org.namul.api.payload.writer.FailureResponseWriter;
1513
import org.namul.api.payload.writer.supports.DefaultFailureResponseWriter;
@@ -21,7 +19,7 @@
2119
import java.util.Optional;
2220

2321
@AutoConfiguration(
24-
after = {DiscordSenderAutoConfiguration.class}
22+
after = {DiscordSenderAutoConfiguration.class, SlackSenderAutoConfiguration.class}
2523
)
2624
public class ExceptionAdviceAutoConfiguration {
2725

@@ -48,9 +46,12 @@ <R extends ErrorReasonDTO> ExceptionAdvice<R> exceptionAdvice(ExceptionAdviceCon
4846
@Bean
4947
@ConditionalOnMissingBean(ExceptionAdviceMessageManager.class)
5048
ExceptionAdviceMessageManager exceptionAdviceMessageManager(DiscordExceptionAdviceMessageSender discordExceptionAdviceMessageSender,
51-
Optional<ExceptionAdviceMessageGenerator<DiscordExceptionAdviceMessage>> discordGeneratorOptional) {
49+
Optional<ExceptionAdviceMessageGenerator<DiscordExceptionAdviceMessage>> discordGeneratorOptional,
50+
SlackExceptionAdviceMessageSender slackExceptionAdviceMessageSender,
51+
Optional<ExceptionAdviceMessageGenerator<SlackExceptionAdviceMessage>> slackGeneratorOptional) {
5252
ExceptionAdviceMessageManager manager = new ExceptionAdviceMessageManager();
5353
manager.addSender(discordExceptionAdviceMessageSender, discordGeneratorOptional.orElseGet(DefaultDiscordExceptionAdviceMessageGenerator::new));
54+
manager.addSender(slackExceptionAdviceMessageSender, slackGeneratorOptional.orElseGet(DefaultSlackExceptionAdviceMessageGenerator::new));
5455
return manager;
5556
}
5657
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package org.namul.api.payload.config;
2+
3+
import org.namul.api.payload.message.SlackExceptionAdviceMessageSender;
4+
import org.namul.api.payload.message.SlackExceptionAdviceUtil;
5+
import org.namul.api.payload.properties.SlackExceptionAdviceProperties;
6+
import org.springframework.boot.autoconfigure.AutoConfiguration;
7+
import org.springframework.context.annotation.Bean;
8+
9+
@AutoConfiguration
10+
public class SlackSenderAutoConfiguration {
11+
12+
@Bean
13+
SlackExceptionAdviceUtil slackExceptionAdviceUtil() {
14+
return new SlackExceptionAdviceUtil();
15+
}
16+
17+
@Bean
18+
SlackExceptionAdviceMessageSender slackExceptionAdviceMessageSender(SlackExceptionAdviceProperties slackExceptionAdviceProperties) {
19+
return new SlackExceptionAdviceMessageSender(slackExceptionAdviceUtil(), slackExceptionAdviceProperties);
20+
}
21+
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.namul.api.payload.message;
22

33
import lombok.RequiredArgsConstructor;
4-
import org.namul.api.payload.properties.DiscordProperties;
4+
import org.namul.api.payload.properties.DiscordExceptionAdviceProperties;
55

66
/**
77
* The message sender that send message to discord with properties and discordUtil
@@ -10,15 +10,15 @@
1010
public class DiscordExceptionAdviceMessageSender implements ExceptionAdviceMessageSender<DiscordExceptionAdviceMessage> {
1111

1212
private final DiscordExceptionAdviceUtil discordUtil;
13-
private final DiscordProperties discordProperties;
13+
private final DiscordExceptionAdviceProperties discordExceptionAdviceProperties;
1414

1515
@Override
1616
public void sendMessage(DiscordExceptionAdviceMessage discordExceptionAdviceMessage) {
17-
discordUtil.sendAlarm(discordProperties.getWebHookUrl(), discordExceptionAdviceMessage);
17+
discordUtil.sendAlarm(discordExceptionAdviceProperties.getWebHookUrl(), discordExceptionAdviceMessage);
1818
}
1919

2020
@Override
2121
public <E extends Exception> boolean isEnable(Class<E> cls) {
22-
return discordProperties.isEnable() && discordProperties.getScope().contains(cls.getSimpleName());
22+
return discordExceptionAdviceProperties.isEnable() && discordExceptionAdviceProperties.getScope().contains(cls.getSimpleName());
2323
}
2424
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package org.namul.api.payload.message;
2+
3+
import lombok.Builder;
4+
import lombok.Getter;
5+
import org.namul.api.payload.message.format.SlackBlock;
6+
7+
import java.util.ArrayList;
8+
import java.util.List;
9+
10+
/**
11+
* Slack WebHook API message format
12+
*/
13+
@Getter
14+
@Builder
15+
public class SlackExceptionAdviceMessage implements ExceptionAdviceMessage {
16+
17+
private List<SlackBlock> blocks;
18+
19+
public SlackExceptionAdviceMessage() {
20+
this.blocks = new ArrayList<>();
21+
}
22+
23+
public SlackExceptionAdviceMessage(List<SlackBlock> blocks) {
24+
this.blocks = blocks;
25+
}
26+
27+
public void addBlock(SlackBlock block) {
28+
this.blocks.add(block);
29+
}
30+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package org.namul.api.payload.message;
2+
3+
import lombok.RequiredArgsConstructor;
4+
import org.namul.api.payload.properties.SlackExceptionAdviceProperties;
5+
6+
/**
7+
* The message sender that send message to slack with properties and slackUtil
8+
*/
9+
@RequiredArgsConstructor
10+
public class SlackExceptionAdviceMessageSender implements ExceptionAdviceMessageSender<SlackExceptionAdviceMessage> {
11+
12+
private final SlackExceptionAdviceUtil slackExceptionAdviceUtil;
13+
private final SlackExceptionAdviceProperties slackExceptionAdviceProperties;
14+
15+
@Override
16+
public void sendMessage(SlackExceptionAdviceMessage slackExceptionAdviceMessage) {
17+
slackExceptionAdviceUtil.sendAlarm(slackExceptionAdviceProperties.getWebHookUrl(), slackExceptionAdviceMessage);
18+
}
19+
20+
@Override
21+
public <E extends Exception> boolean isEnable(Class<E> cls) {
22+
return slackExceptionAdviceProperties.isEnable() && slackExceptionAdviceProperties.getScope().contains(cls.getSimpleName());
23+
}
24+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package org.namul.api.payload.message;
2+
3+
import com.fasterxml.jackson.core.JsonProcessingException;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import lombok.extern.slf4j.Slf4j;
6+
import org.springframework.http.*;
7+
import org.springframework.web.client.RestTemplate;
8+
9+
@Slf4j
10+
public class SlackExceptionAdviceUtil {
11+
12+
private final RestTemplate restTemplate = new RestTemplate();
13+
private final ObjectMapper objectMapper = new ObjectMapper();
14+
15+
/**
16+
* Send message to discord webhook url
17+
* @param webHookUrl The Slack server webhook url
18+
* @param slackExceptionAdviceMessage The message will be sent to discord
19+
*/
20+
public void sendAlarm(String webHookUrl, SlackExceptionAdviceMessage slackExceptionAdviceMessage) {
21+
if (webHookUrl == null || webHookUrl.isEmpty() || slackExceptionAdviceMessage == null) {
22+
log.warn("SlackExceptionAdviceUtil: Cannot find Web hook url or slack message");
23+
return;
24+
}
25+
try {
26+
String jsonMessage = objectMapper.writeValueAsString(slackExceptionAdviceMessage);
27+
28+
HttpHeaders headers = new HttpHeaders();
29+
headers.set("Content-type", "application/json");
30+
31+
HttpEntity<String> request = new HttpEntity<>(jsonMessage, headers);
32+
33+
ResponseEntity<String> response = restTemplate.exchange(webHookUrl, HttpMethod.POST, request, String.class);
34+
35+
if (!response.getStatusCode().is2xxSuccessful()) {
36+
log.warn("Failed to send Slack message: {}", response.getStatusCode());
37+
}
38+
} catch (JsonProcessingException e) {
39+
e.printStackTrace();
40+
log.warn("Failed to send Slack message", e);
41+
}
42+
}
43+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package org.namul.api.payload.message.format;
2+
3+
/**
4+
* The Top level interface for slack web hook api body
5+
*/
6+
public interface SlackBlock {
7+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.namul.api.payload.message.format;
2+
3+
import lombok.Builder;
4+
import lombok.Getter;
5+
6+
@Getter
7+
@Builder
8+
public class SlackDivider implements SlackBlock {
9+
private final String type = "divider";
10+
11+
public static SlackDivider getInstance() {
12+
return new SlackDivider();
13+
}
14+
}

0 commit comments

Comments
 (0)