diff --git a/backend/src/main/java/hanglog/trip/service/ImageService.java b/backend/src/main/java/hanglog/trip/service/ImageService.java index 62d751fd5..9bd3c9748 100644 --- a/backend/src/main/java/hanglog/trip/service/ImageService.java +++ b/backend/src/main/java/hanglog/trip/service/ImageService.java @@ -5,10 +5,12 @@ import hanglog.global.exception.ImageException; import hanglog.image.domain.ImageFile; +import hanglog.image.domain.S3ImageEvent; import hanglog.image.infrastructure.ImageUploader; import hanglog.trip.dto.response.ImagesResponse; import java.util.List; import lombok.RequiredArgsConstructor; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @@ -20,16 +22,26 @@ public class ImageService { private static final int EMPTY_LIST_SIZE = 0; private final ImageUploader imageUploader; + private final ApplicationEventPublisher publisher; public ImagesResponse save(final List images) { validateSizeOfImages(images); final List imageFiles = images.stream() .map(ImageFile::new) .toList(); - final List imageNames = imageUploader.uploadImages(imageFiles); + final List imageNames = uploadImages(imageFiles); return new ImagesResponse(imageNames); } + private List uploadImages(final List imageFiles) { + try { + return imageUploader.uploadImages(imageFiles); + } catch (final ImageException e) { + imageFiles.forEach(imageFile -> publisher.publishEvent(new S3ImageEvent(imageFile.getHashedName()))); + throw e; + } + } + private void validateSizeOfImages(final List images) { if (images.size() > MAX_IMAGE_LIST_SIZE) { throw new ImageException(EXCEED_IMAGE_LIST_SIZE);