diff --git a/src/main/java/org/fontory/fontorybe/common/adapter/outbound/DiscordExceptionLoggingAspect.java b/src/main/java/org/fontory/fontorybe/common/adapter/outbound/DiscordExceptionLoggingAspect.java index 5280b43..ed397da 100644 --- a/src/main/java/org/fontory/fontorybe/common/adapter/outbound/DiscordExceptionLoggingAspect.java +++ b/src/main/java/org/fontory/fontorybe/common/adapter/outbound/DiscordExceptionLoggingAspect.java @@ -156,24 +156,28 @@ private String buildStackTrace(Throwable ex) { */ @Async protected void sendToDiscord(String payloadJson, String fullStackTrace) { - byte[] stackTraceBytes = fullStackTrace.getBytes(StandardCharsets.UTF_8); - ByteArrayResource stackTraceResource = new ByteArrayResource(stackTraceBytes) { - @Override - public String getFilename() { - return "stacktrace.txt"; - } - }; + try { + byte[] stackTraceBytes = fullStackTrace.getBytes(StandardCharsets.UTF_8); + ByteArrayResource stackTraceResource = new ByteArrayResource(stackTraceBytes) { + @Override + public String getFilename() { + return "stacktrace.txt"; + } + }; - LinkedMultiValueMap multipartBody = new LinkedMultiValueMap<>(); - multipartBody.add("payload_json", payloadJson); - multipartBody.add("file", stackTraceResource); + LinkedMultiValueMap multipartBody = new LinkedMultiValueMap<>(); + multipartBody.add("payload_json", payloadJson); + multipartBody.add("file", stackTraceResource); - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.MULTIPART_FORM_DATA); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.MULTIPART_FORM_DATA); - HttpEntity> requestEntity = - new HttpEntity<>(multipartBody, headers); + HttpEntity> requestEntity = + new HttpEntity<>(multipartBody, headers); - restTemplate.postForEntity(discordWebhookUrl, requestEntity, String.class); + restTemplate.postForEntity(discordWebhookUrl, requestEntity, String.class); + } catch (Exception e) { + log.warn("Exception occured while sending stacktrace to Discord: {}", e); + } } } \ No newline at end of file diff --git a/src/main/java/org/fontory/fontorybe/file/adapter/outbound/s3/ProfileImageUpdateListener.java b/src/main/java/org/fontory/fontorybe/file/adapter/outbound/s3/ProfileImageUpdateListener.java index ecfc80f..17b58cc 100644 --- a/src/main/java/org/fontory/fontorybe/file/adapter/outbound/s3/ProfileImageUpdateListener.java +++ b/src/main/java/org/fontory/fontorybe/file/adapter/outbound/s3/ProfileImageUpdateListener.java @@ -28,19 +28,25 @@ void init() { profileImagePrefix = s3Config.getPrefix(FileType.PROFILE_IMAGE); } - @TransactionalEventListener(phase = TransactionPhase.BEFORE_COMMIT) - public void beforeCommit(ProfileImageUpdatedEvent event) { - s3.copyObject(CopyObjectRequest.builder() - .sourceBucket(profileImageBucketName) - .sourceKey(profileImagePrefix + "/" + event.getTempKey()) - .destinationBucket(profileImageBucketName) - .destinationKey(profileImagePrefix + "/" + event.getFixedKey()) - .build()); + @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) + public void afterCommit(ProfileImageUpdatedEvent event) { + try { + s3.copyObject(CopyObjectRequest.builder() + .sourceBucket(profileImageBucketName) + .sourceKey(profileImagePrefix + "/" + event.getTempKey()) + .destinationBucket(profileImageBucketName) + .destinationKey(profileImagePrefix + "/" + event.getFixedKey()) + .build()); - s3.deleteObject(DeleteObjectRequest.builder() - .bucket(profileImageBucketName) - .key(profileImagePrefix + "/" + event.getTempKey()) - .build()); + s3.deleteObject(DeleteObjectRequest.builder() + .bucket(profileImageBucketName) + .key(profileImagePrefix + "/" + event.getTempKey()) + .build()); + } catch (Exception e) { + log.error("Error while copying/deleting profile image to s3: tempKey={}, fixedKey={}", + event.getTempKey(), event.getFixedKey(), e); + throw e; + } } @TransactionalEventListener(phase = TransactionPhase.AFTER_ROLLBACK)