Skip to content

Commit 3979c13

Browse files
authored
Merge pull request #54 from team-fontory/feature/error-handling-s3-discord
chore: Improve S3 Event Listener and Discord Notification Error Handling
2 parents 965c382 + 3989d23 commit 3979c13

File tree

2 files changed

+37
-27
lines changed

2 files changed

+37
-27
lines changed

src/main/java/org/fontory/fontorybe/common/adapter/outbound/DiscordExceptionLoggingAspect.java

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -156,24 +156,28 @@ private String buildStackTrace(Throwable ex) {
156156
*/
157157
@Async
158158
protected void sendToDiscord(String payloadJson, String fullStackTrace) {
159-
byte[] stackTraceBytes = fullStackTrace.getBytes(StandardCharsets.UTF_8);
160-
ByteArrayResource stackTraceResource = new ByteArrayResource(stackTraceBytes) {
161-
@Override
162-
public String getFilename() {
163-
return "stacktrace.txt";
164-
}
165-
};
159+
try {
160+
byte[] stackTraceBytes = fullStackTrace.getBytes(StandardCharsets.UTF_8);
161+
ByteArrayResource stackTraceResource = new ByteArrayResource(stackTraceBytes) {
162+
@Override
163+
public String getFilename() {
164+
return "stacktrace.txt";
165+
}
166+
};
166167

167-
LinkedMultiValueMap<String, Object> multipartBody = new LinkedMultiValueMap<>();
168-
multipartBody.add("payload_json", payloadJson);
169-
multipartBody.add("file", stackTraceResource);
168+
LinkedMultiValueMap<String, Object> multipartBody = new LinkedMultiValueMap<>();
169+
multipartBody.add("payload_json", payloadJson);
170+
multipartBody.add("file", stackTraceResource);
170171

171-
HttpHeaders headers = new HttpHeaders();
172-
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
172+
HttpHeaders headers = new HttpHeaders();
173+
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
173174

174-
HttpEntity<MultiValueMap<String, Object>> requestEntity =
175-
new HttpEntity<>(multipartBody, headers);
175+
HttpEntity<MultiValueMap<String, Object>> requestEntity =
176+
new HttpEntity<>(multipartBody, headers);
176177

177-
restTemplate.postForEntity(discordWebhookUrl, requestEntity, String.class);
178+
restTemplate.postForEntity(discordWebhookUrl, requestEntity, String.class);
179+
} catch (Exception e) {
180+
log.warn("Exception occured while sending stacktrace to Discord: {}", e);
181+
}
178182
}
179183
}

src/main/java/org/fontory/fontorybe/file/adapter/outbound/s3/ProfileImageUpdateListener.java

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,25 @@ void init() {
2828
profileImagePrefix = s3Config.getPrefix(FileType.PROFILE_IMAGE);
2929
}
3030

31-
@TransactionalEventListener(phase = TransactionPhase.BEFORE_COMMIT)
32-
public void beforeCommit(ProfileImageUpdatedEvent event) {
33-
s3.copyObject(CopyObjectRequest.builder()
34-
.sourceBucket(profileImageBucketName)
35-
.sourceKey(profileImagePrefix + "/" + event.getTempKey())
36-
.destinationBucket(profileImageBucketName)
37-
.destinationKey(profileImagePrefix + "/" + event.getFixedKey())
38-
.build());
31+
@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
32+
public void afterCommit(ProfileImageUpdatedEvent event) {
33+
try {
34+
s3.copyObject(CopyObjectRequest.builder()
35+
.sourceBucket(profileImageBucketName)
36+
.sourceKey(profileImagePrefix + "/" + event.getTempKey())
37+
.destinationBucket(profileImageBucketName)
38+
.destinationKey(profileImagePrefix + "/" + event.getFixedKey())
39+
.build());
3940

40-
s3.deleteObject(DeleteObjectRequest.builder()
41-
.bucket(profileImageBucketName)
42-
.key(profileImagePrefix + "/" + event.getTempKey())
43-
.build());
41+
s3.deleteObject(DeleteObjectRequest.builder()
42+
.bucket(profileImageBucketName)
43+
.key(profileImagePrefix + "/" + event.getTempKey())
44+
.build());
45+
} catch (Exception e) {
46+
log.error("Error while copying/deleting profile image to s3: tempKey={}, fixedKey={}",
47+
event.getTempKey(), event.getFixedKey(), e);
48+
throw e;
49+
}
4450
}
4551

4652
@TransactionalEventListener(phase = TransactionPhase.AFTER_ROLLBACK)

0 commit comments

Comments
 (0)