From 9c5d3c160c4e3755041f2e64f38fa7bf3f89403a Mon Sep 17 00:00:00 2001 From: PicturePark1101 Date: Mon, 10 Feb 2025 16:01:43 +0900 Subject: [PATCH 1/9] =?UTF-8?q?refactor=20:=20s3=20=EC=82=AC=EC=A7=84=20?= =?UTF-8?q?=EC=97=85=EB=A1=9C=EB=93=9C=ED=95=A0=20=EB=95=8C=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=20=EC=B2=98=EB=A6=AC=20=EB=A1=9C=EC=A7=81=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0=20#267?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../juinjang/service/external/S3Service.java | 50 +++++++++++-------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/src/main/java/umc/th/juinjang/service/external/S3Service.java b/src/main/java/umc/th/juinjang/service/external/S3Service.java index 7a3113f..90f997f 100644 --- a/src/main/java/umc/th/juinjang/service/external/S3Service.java +++ b/src/main/java/umc/th/juinjang/service/external/S3Service.java @@ -5,37 +5,41 @@ import com.amazonaws.services.s3.model.ObjectMetadata; import com.amazonaws.services.s3.model.PutObjectRequest; import java.io.File; -import java.io.IOException; import java.io.FileOutputStream; +import java.io.IOException; import java.io.InputStream; import java.net.URI; import java.util.Optional; import java.util.UUID; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; -import org.springframework.beans.factory.annotation.Value; import umc.th.juinjang.apiPayload.code.status.ErrorStatus; import umc.th.juinjang.apiPayload.exception.handler.S3Handler; @Slf4j -@RequiredArgsConstructor // final 멤버변수가 있으면 생성자 항목에 포함시킴 -@Component +@RequiredArgsConstructor @Service public class S3Service { - + private final Logger logger = LoggerFactory.getLogger(this.getClass()); private final AmazonS3Client amazonS3Client; @Value("${cloud.aws.s3.bucket}") private String bucket; - // MultipartFile을 전달받아 File로 전환한 후 S3에 업로드 - public String upload(MultipartFile multipartFile, String dirName) throws IOException { - File uploadFile = convert(multipartFile) - .orElseThrow(() -> new IllegalArgumentException("MultipartFile -> File 전환 실패")); - return upload(uploadFile, dirName, multipartFile.getInputStream(), multipartFile.getSize(), multipartFile.getContentType()); + public String upload(MultipartFile multipartFile, String dirName) { + File uploadFile = convert(multipartFile).orElseThrow(() -> new S3Handler(ErrorStatus.IMAGE_EMPTY)); + + try { + return upload(uploadFile, dirName, multipartFile.getInputStream(), multipartFile.getSize(), multipartFile.getContentType()); + } catch (Exception e) { + logger.error("파일 업로드 중 error 발생"); + throw new S3Handler(ErrorStatus._INTERNAL_SERVER_ERROR); + } } private String upload(File uploadFile,String dirName, InputStream inputStream, Long fileSize, String contentType) { @@ -72,16 +76,22 @@ private void removeNewFile(File targetFile) { } } - private Optional convert(MultipartFile file) throws IOException { - String originalFilename = file.getOriginalFilename(); - String safeFilename = originalFilename.replaceAll("[^a-zA-Z0-9.-]", "_"); - File convertFile = new File(safeFilename); - - if(convertFile.createNewFile()) { - try (FileOutputStream fos = new FileOutputStream(convertFile)) { - fos.write(file.getBytes()); + private Optional convert(MultipartFile file) { + try { + String originalFilename = file.getOriginalFilename(); + String safeFilename = originalFilename.replaceAll("[^a-zA-Z0-9.-]", "_"); + File convertFile = new File(safeFilename); + + if (convertFile.createNewFile()) { + try (FileOutputStream fos = new FileOutputStream(convertFile)) { + fos.write(file.getBytes()); + } + return Optional.of(convertFile); + } else { + return Optional.empty(); } - return Optional.of(convertFile); + } catch (Exception e) { + logger.error("파일 변환 중 error 발생" +e); } return Optional.empty(); } From 81c17ea401b81cff01a95428f850986d5d45a2b6 Mon Sep 17 00:00:00 2001 From: PicturePark1101 Date: Mon, 10 Feb 2025 16:04:42 +0900 Subject: [PATCH 2/9] =?UTF-8?q?refactor=20:=20=EA=B8=B0=EC=A1=B4=20respons?= =?UTF-8?q?e=20=EA=B0=9D=EC=B2=B4=20record=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= =?UTF-8?q?=20#267?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/dto/image/ImagesGetResponse.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/main/java/umc/th/juinjang/model/dto/image/ImagesGetResponse.java diff --git a/src/main/java/umc/th/juinjang/model/dto/image/ImagesGetResponse.java b/src/main/java/umc/th/juinjang/model/dto/image/ImagesGetResponse.java new file mode 100644 index 0000000..95c0870 --- /dev/null +++ b/src/main/java/umc/th/juinjang/model/dto/image/ImagesGetResponse.java @@ -0,0 +1,18 @@ +package umc.th.juinjang.model.dto.image; + +import java.util.List; +import umc.th.juinjang.model.entity.Image; + +public record ImagesGetResponse (List images) { + record ImageResponse(Long imageId, String imageUrl) { + static ImageResponse of(Long imageId, String imageUrl) { + return new ImageResponse(imageId, imageUrl); + } + } + + public static ImagesGetResponse of(List images) { + return new ImagesGetResponse(images.stream().map(it -> ImageResponse.of(it.getImageId(), it.getImageUrl())).toList()); + } +} + + From 649c12dec83b3129a6ec5bd0ae9f9f2d74b39849 Mon Sep 17 00:00:00 2001 From: PicturePark1101 Date: Mon, 10 Feb 2025 16:05:07 +0900 Subject: [PATCH 3/9] =?UTF-8?q?refactor=20:=20Entity=20=EB=82=B4=EB=B6=80?= =?UTF-8?q?=20static=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?#267?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/umc/th/juinjang/model/entity/Image.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/umc/th/juinjang/model/entity/Image.java b/src/main/java/umc/th/juinjang/model/entity/Image.java index 5972145..116f337 100644 --- a/src/main/java/umc/th/juinjang/model/entity/Image.java +++ b/src/main/java/umc/th/juinjang/model/entity/Image.java @@ -36,4 +36,10 @@ public class Image extends BaseEntity { @Column(nullable = false) private String imageUrl; + public static Image create(String imageUrl, Limjang limjang) { + return Image.builder() + .imageUrl(imageUrl) + .limjangId(limjang) + .build(); + } } From 6136b770d4c4fef1f518836aaea5103842b077b2 Mon Sep 17 00:00:00 2001 From: PicturePark1101 Date: Mon, 10 Feb 2025 16:05:32 +0900 Subject: [PATCH 4/9] =?UTF-8?q?refactor=20:=20=EC=BB=A8=ED=8A=B8=EB=A1=A4?= =?UTF-8?q?=EB=9F=AC=20=EC=BD=94=EB=93=9C=20=EB=A6=AC=ED=8C=A9=20#267?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../juinjang/controller/ImageController.java | 34 ++++++------------- 1 file changed, 10 insertions(+), 24 deletions(-) diff --git a/src/main/java/umc/th/juinjang/controller/ImageController.java b/src/main/java/umc/th/juinjang/controller/ImageController.java index 39f04a0..d19a0a3 100644 --- a/src/main/java/umc/th/juinjang/controller/ImageController.java +++ b/src/main/java/umc/th/juinjang/controller/ImageController.java @@ -6,7 +6,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.http.MediaType; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; @@ -19,10 +18,9 @@ import umc.th.juinjang.apiPayload.ApiResponse; import umc.th.juinjang.apiPayload.code.status.SuccessStatus; import umc.th.juinjang.model.dto.image.ImageDeleteRequestDTO; -import umc.th.juinjang.model.dto.image.ImageListResponseDTO; +import umc.th.juinjang.model.dto.image.ImagesGetResponse; import umc.th.juinjang.service.image.ImageCommandService; import umc.th.juinjang.service.image.ImageQueryService; -import umc.th.juinjang.service.limjang.LimjangCommandService; @RestController @RequestMapping("/api/limjang/image") @@ -30,38 +28,26 @@ @Validated public class ImageController { - private final LimjangCommandService limjangCommandService; private final ImageCommandService imageCommandService; private final ImageQueryService imageQueryService; - @CrossOrigin - @Operation(summary = "사진 생성 API", description = "사진 업로드 api입니다.") - @PostMapping(value = "", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, - produces = MediaType.APPLICATION_JSON_VALUE) - public ApiResponse uploadImages( - @RequestParam(name = "limjangId") Long limjangId, @RequestPart(name = "images") List images) - { - imageCommandService.uploadImages(limjangId ,images); - return ApiResponse.onSuccess(SuccessStatus.IMAGE_UPDATE); - } + @Operation(summary = "사진 생성 API", description = "사진 업로드 api입니다.") + @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + public ApiResponse uploadImages(@RequestParam(name = "limjangId") Long limjangId, @RequestPart(name = "images") List images) { + imageCommandService.createImages(limjangId, images); + return ApiResponse.onSuccess(SuccessStatus.IMAGE_UPDATE); + } - @CrossOrigin @Operation(summary = "사진 조회 API", description = "사진을 조회하는 api입니다.") - @GetMapping(value = "{limjangId}") - public ApiResponse uploadImages( - @PathVariable(name = "limjangId") @Valid Long limjangId) - { + @GetMapping(value = "/{limjangId}") + public ApiResponse uploadImages(@PathVariable(name = "limjangId") @Valid Long limjangId) { return ApiResponse.onSuccess(imageQueryService.getImageList(limjangId)); } - @CrossOrigin @Operation(summary = "이미지 선택 삭제", description = "이미지 게시글을 여러 개 선택해서 삭제하는 api입니다.") @PostMapping("/delete") - public ApiResponse deleteImage(@RequestBody @Valid ImageDeleteRequestDTO.DeleteDto deleteIds - ){ - + public ApiResponse deleteImage(@RequestBody @Valid ImageDeleteRequestDTO.DeleteDto deleteIds) { imageCommandService.deleteImages(deleteIds); return ApiResponse.onSuccess(SuccessStatus.IMAGE_DELETE); } - } From 0ae8efab6ef6815bc6c144ce43d1007d6b39feec Mon Sep 17 00:00:00 2001 From: PicturePark1101 Date: Mon, 10 Feb 2025 16:05:51 +0900 Subject: [PATCH 5/9] =?UTF-8?q?refactor=20:=20findById=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=20#267?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../th/juinjang/repository/limjang/LimjangRepository.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/umc/th/juinjang/repository/limjang/LimjangRepository.java b/src/main/java/umc/th/juinjang/repository/limjang/LimjangRepository.java index 2e213f4..ae3b4a4 100644 --- a/src/main/java/umc/th/juinjang/repository/limjang/LimjangRepository.java +++ b/src/main/java/umc/th/juinjang/repository/limjang/LimjangRepository.java @@ -49,5 +49,8 @@ public interface LimjangRepository extends JpaRepository, Limjang Optional findByLimjangIdAndMemberIdWithLimjangPriceAndDeletedIsFalse(@Param("id") Long id, @Param("member") Member member); @Query("SELECT l FROM Limjang l join fetch l.limjangPrice left join fetch l.report WHERE l.limjangId = :id AND l.memberId = :member AND l.deleted = false") - Optional findByLimjangIdAndDeletedIsFalse(@Param("id") Long id, @Param("member") Member member); + Optional findByLimjangIdAndMemberAndDeletedIsFalse(@Param("id") Long id, @Param("member") Member member); + + @Query("SELECT l FROM Limjang l WHERE l.limjangId = :id AND l.deleted = false") + Optional findByLimjangIdAndDeletedIsFalse(@Param("id") Long id); } \ No newline at end of file From 4441dc7fb590e6020f858f59c5a0c6b54bbfd54a Mon Sep 17 00:00:00 2001 From: PicturePark1101 Date: Mon, 10 Feb 2025 16:06:03 +0900 Subject: [PATCH 6/9] =?UTF-8?q?refactor=20:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=ED=8C=8C=EC=9D=BC=20=EC=A0=9C=EA=B1=B0=20#267?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../converter/image/ImageListConverter.java | 27 ------------------- .../converter/image/ImageUploadConverter.java | 16 ----------- 2 files changed, 43 deletions(-) delete mode 100644 src/main/java/umc/th/juinjang/converter/image/ImageListConverter.java delete mode 100644 src/main/java/umc/th/juinjang/converter/image/ImageUploadConverter.java diff --git a/src/main/java/umc/th/juinjang/converter/image/ImageListConverter.java b/src/main/java/umc/th/juinjang/converter/image/ImageListConverter.java deleted file mode 100644 index 5f02c57..0000000 --- a/src/main/java/umc/th/juinjang/converter/image/ImageListConverter.java +++ /dev/null @@ -1,27 +0,0 @@ -package umc.th.juinjang.converter.image; - -import java.util.List; -import java.util.Optional; -import umc.th.juinjang.model.dto.image.ImageListResponseDTO; -import umc.th.juinjang.model.dto.image.ImageUploadResponseDTO; -import umc.th.juinjang.model.entity.Image; - -public class ImageListConverter { - - public static ImageListResponseDTO.ImagesListDTO toImageListDto(List images){ - List imageDtoList = - images.stream().map(ImageListConverter::toImageDto).toList(); - - return ImageListResponseDTO.ImagesListDTO - .builder() - .images(imageDtoList) - .build(); - } - - public static ImageListResponseDTO.ImageDTO toImageDto(Image image){ - return ImageListResponseDTO.ImageDTO.builder() - .imageId(image.getImageId()) - .imageUrl(image.getImageUrl()) - .build(); - } -} diff --git a/src/main/java/umc/th/juinjang/converter/image/ImageUploadConverter.java b/src/main/java/umc/th/juinjang/converter/image/ImageUploadConverter.java deleted file mode 100644 index 93301f6..0000000 --- a/src/main/java/umc/th/juinjang/converter/image/ImageUploadConverter.java +++ /dev/null @@ -1,16 +0,0 @@ -package umc.th.juinjang.converter.image; - -import umc.th.juinjang.model.dto.image.ImageUploadRequestDTO; -import umc.th.juinjang.model.entity.Image; -import umc.th.juinjang.model.entity.Limjang; - -public class ImageUploadConverter { - - public static Image toImageDto(String fileName, Limjang limjang){ - return Image.builder() - .imageUrl(fileName) - .limjangId(limjang) - .build(); - } - -} From df369ce12eb8d6a0ed8be33d9479193260787fdc Mon Sep 17 00:00:00 2001 From: PicturePark1101 Date: Mon, 10 Feb 2025 16:06:32 +0900 Subject: [PATCH 7/9] =?UTF-8?q?refactor=20:=20=EC=9D=B4=EB=AF=B8=EC=A7=80?= =?UTF-8?q?=20=EC=A1=B0=ED=9A=8C=20service=20=EB=A6=AC=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A7=81=20#267?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/image/ImageQueryService.java | 4 ++-- .../service/image/ImageQueryServiceImpl.java | 17 ++++++++--------- .../limjang/LimjangQueryServiceImpl.java | 2 +- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/main/java/umc/th/juinjang/service/image/ImageQueryService.java b/src/main/java/umc/th/juinjang/service/image/ImageQueryService.java index b2cfd10..f8a4703 100644 --- a/src/main/java/umc/th/juinjang/service/image/ImageQueryService.java +++ b/src/main/java/umc/th/juinjang/service/image/ImageQueryService.java @@ -1,7 +1,7 @@ package umc.th.juinjang.service.image; -import umc.th.juinjang.model.dto.image.ImageListResponseDTO; +import umc.th.juinjang.model.dto.image.ImagesGetResponse; public interface ImageQueryService { - ImageListResponseDTO.ImagesListDTO getImageList(Long limjangId); + ImagesGetResponse getImageList(long limjangId); } diff --git a/src/main/java/umc/th/juinjang/service/image/ImageQueryServiceImpl.java b/src/main/java/umc/th/juinjang/service/image/ImageQueryServiceImpl.java index 73b2a4c..148c9ea 100644 --- a/src/main/java/umc/th/juinjang/service/image/ImageQueryServiceImpl.java +++ b/src/main/java/umc/th/juinjang/service/image/ImageQueryServiceImpl.java @@ -7,8 +7,7 @@ import org.springframework.transaction.annotation.Transactional; import umc.th.juinjang.apiPayload.code.status.ErrorStatus; import umc.th.juinjang.apiPayload.exception.handler.LimjangHandler; -import umc.th.juinjang.converter.image.ImageListConverter; -import umc.th.juinjang.model.dto.image.ImageListResponseDTO; +import umc.th.juinjang.model.dto.image.ImagesGetResponse; import umc.th.juinjang.model.entity.Image; import umc.th.juinjang.model.entity.Limjang; import umc.th.juinjang.repository.image.ImageRepository; @@ -24,13 +23,13 @@ public class ImageQueryServiceImpl implements ImageQueryService { @Override @Transactional(readOnly = true) - public ImageListResponseDTO.ImagesListDTO getImageList(Long limjangId) { - Limjang findLimjang = limjangRepository.findById(limjangId) - .orElseThrow(() -> new LimjangHandler(ErrorStatus.LIMJANG_NOTFOUND_ERROR)); - - List imageList = imageRepository.findImagesByLimjangId(findLimjang); - - return ImageListConverter.toImageListDto(imageList); + public ImagesGetResponse getImageList(final long limjangId) { + Limjang limjang = getLimjang(limjangId); + List images = imageRepository.findImagesByLimjangId(limjang); + return ImagesGetResponse.of(images); + } + private Limjang getLimjang(final long limjangId) { + return limjangRepository.findByLimjangIdAndDeletedIsFalse(limjangId).orElseThrow(() -> new LimjangHandler(ErrorStatus.LIMJANG_NOTFOUND_ERROR)); } } diff --git a/src/main/java/umc/th/juinjang/service/limjang/LimjangQueryServiceImpl.java b/src/main/java/umc/th/juinjang/service/limjang/LimjangQueryServiceImpl.java index de4151b..798dd99 100644 --- a/src/main/java/umc/th/juinjang/service/limjang/LimjangQueryServiceImpl.java +++ b/src/main/java/umc/th/juinjang/service/limjang/LimjangQueryServiceImpl.java @@ -62,7 +62,7 @@ public LimjangDetailGetResponse getDetail(long id, Member member) { } private Limjang getByIdAndMember(Long id, Member member) { - return limjangRepository.findByLimjangIdAndDeletedIsFalse(id, member).orElseThrow(() -> new LimjangHandler(ErrorStatus.LIMJANG_NOTFOUND_ERROR)); +거 return limjangRepository.findByLimjangIdAndMemberAndDeletedIsFalse(id, member).orElseThrow(() -> new LimjangHandler(ErrorStatus.LIMJANG_NOTFOUND_ERROR)); } @Override From 57aa804c50c916eb67f52fa2f3444323c44afd3b Mon Sep 17 00:00:00 2001 From: PicturePark1101 Date: Mon, 10 Feb 2025 16:06:47 +0900 Subject: [PATCH 8/9] =?UTF-8?q?refactor=20:=20=EC=9D=B4=EB=AF=B8=EC=A7=80?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1/=EC=82=AD=EC=A0=9C=20service=20=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A7=81=20#267?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/image/ImageCommandService.java | 2 +- .../image/ImageCommandServiceImpl.java | 56 ++++++------------- 2 files changed, 17 insertions(+), 41 deletions(-) diff --git a/src/main/java/umc/th/juinjang/service/image/ImageCommandService.java b/src/main/java/umc/th/juinjang/service/image/ImageCommandService.java index f0e6f89..d852953 100644 --- a/src/main/java/umc/th/juinjang/service/image/ImageCommandService.java +++ b/src/main/java/umc/th/juinjang/service/image/ImageCommandService.java @@ -5,7 +5,7 @@ import umc.th.juinjang.model.dto.image.ImageDeleteRequestDTO; public interface ImageCommandService { - void uploadImages(Long limjangId, List images); + void createImages(long limjangId, List images); void deleteImages(ImageDeleteRequestDTO.DeleteDto ids); diff --git a/src/main/java/umc/th/juinjang/service/image/ImageCommandServiceImpl.java b/src/main/java/umc/th/juinjang/service/image/ImageCommandServiceImpl.java index f7b6c97..77e6e02 100644 --- a/src/main/java/umc/th/juinjang/service/image/ImageCommandServiceImpl.java +++ b/src/main/java/umc/th/juinjang/service/image/ImageCommandServiceImpl.java @@ -1,17 +1,12 @@ package umc.th.juinjang.service.image; -import java.io.IOException; import java.util.List; import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.dao.DataIntegrityViolationException; -import org.springframework.dao.EmptyResultDataAccessException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import umc.th.juinjang.apiPayload.code.status.ErrorStatus; import umc.th.juinjang.apiPayload.exception.handler.LimjangHandler; -import umc.th.juinjang.converter.image.ImageUploadConverter; import umc.th.juinjang.model.dto.image.ImageDeleteRequestDTO; import umc.th.juinjang.model.entity.Image; import umc.th.juinjang.model.entity.Limjang; @@ -19,7 +14,6 @@ import umc.th.juinjang.repository.limjang.LimjangRepository; import umc.th.juinjang.service.external.S3Service; -@Slf4j @Service @RequiredArgsConstructor public class ImageCommandServiceImpl implements ImageCommandService { @@ -27,47 +21,29 @@ public class ImageCommandServiceImpl implements ImageCommandService { private final ImageRepository imageRepository; private final LimjangRepository limjangRepository; private final S3Service s3Service; + private final String DIR_NAME = "image"; @Override @Transactional - public void uploadImages(Long limjangId, List images) { - - Limjang limjang = limjangRepository.findById(limjangId) - .orElseThrow(()-> new LimjangHandler(ErrorStatus.LIMJANG_NOTFOUND_ERROR)); - - images.forEach(it -> { - try { - if (!it.isEmpty()) { - String storedFileName = s3Service.upload(it, "image"); - Image image = ImageUploadConverter.toImageDto(storedFileName, limjang); - limjang.saveImages(image); - } - } catch (IOException e) { - throw new RuntimeException(e); - } - }); + public void createImages(final long limjangId, final List files) { + Limjang limjang = getLimjangById(limjangId); + for (MultipartFile file : files) { + String imageUrl = s3Service.upload(file, DIR_NAME); + imageRepository.save(Image.create(imageUrl, limjang)); + } + } + private Limjang getLimjangById(final long limjangId) { + return limjangRepository.findById(limjangId).orElseThrow(()-> new LimjangHandler(ErrorStatus.LIMJANG_NOTFOUND_ERROR)); } @Override @Transactional - public void deleteImages(ImageDeleteRequestDTO.DeleteDto ids - ) { //이미지 id로 삭제한다...! - List deleteIds = ids.getImageIdList(); - - try { - - //s3에서 삭제 - List imageList = imageRepository.findAllById(deleteIds); - - imageList.forEach(image -> { - s3Service.deleteFile(image.getImageUrl()); - imageRepository.deleteById(image.getImageId()); - }); - } catch (DataIntegrityViolationException e) { - throw new LimjangHandler(ErrorStatus.IMAGE_DELETE_NOT_COMPLETE); - } catch (EmptyResultDataAccessException e) { - throw new LimjangHandler(ErrorStatus.IMAGE_DELETE_NOT_FOUND); - } + public void deleteImages(final ImageDeleteRequestDTO.DeleteDto ids) { + List images = imageRepository.findAllById(ids.getImageIdList()); + for (Image image : images) { + s3Service.deleteFile(image.getImageUrl()); + imageRepository.deleteById(image.getImageId()); + } } } From 2917a8809ed09a120619c045dcfdef9d7cf12edf Mon Sep 17 00:00:00 2001 From: PicturePark1101 Date: Mon, 10 Feb 2025 16:10:17 +0900 Subject: [PATCH 9/9] =?UTF-8?q?fix=20:=20=EC=98=A4=ED=83=80=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0=20#267?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../th/juinjang/service/limjang/LimjangQueryServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/umc/th/juinjang/service/limjang/LimjangQueryServiceImpl.java b/src/main/java/umc/th/juinjang/service/limjang/LimjangQueryServiceImpl.java index 798dd99..61b5f8d 100644 --- a/src/main/java/umc/th/juinjang/service/limjang/LimjangQueryServiceImpl.java +++ b/src/main/java/umc/th/juinjang/service/limjang/LimjangQueryServiceImpl.java @@ -62,7 +62,7 @@ public LimjangDetailGetResponse getDetail(long id, Member member) { } private Limjang getByIdAndMember(Long id, Member member) { -거 return limjangRepository.findByLimjangIdAndMemberAndDeletedIsFalse(id, member).orElseThrow(() -> new LimjangHandler(ErrorStatus.LIMJANG_NOTFOUND_ERROR)); + return limjangRepository.findByLimjangIdAndMemberAndDeletedIsFalse(id, member).orElseThrow(() -> new LimjangHandler(ErrorStatus.LIMJANG_NOTFOUND_ERROR)); } @Override