From e1f09d29abd7267862eb96f500e42e70ed024705 Mon Sep 17 00:00:00 2001 From: yunhacandy Date: Fri, 13 Sep 2024 00:48:25 +0900 Subject: [PATCH 1/8] =?UTF-8?q?feat:=20=ED=94=84=EB=A1=9C=EC=A0=9D?= =?UTF-8?q?=ED=8A=B8=20=EA=B5=AC=EC=B2=B4=20=EC=A0=95=EB=B3=B4=20=EC=97=85?= =?UTF-8?q?=EB=A1=9C=EB=93=9C=20=EC=A4=91=20=EB=94=94=ED=85=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=97=85=EB=A1=9C=EB=93=9C=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 디테일 이미지 업로드 메소드 추가 - 디테일 이미지 순서 보장 로직 추가 --- .../project/controller/ProjectController.java | 2 +- .../dto/CreateProjectImageRequest.java | 4 +++- .../generation/entity/ProjectImage.java | 21 ++++++++++++++++--- .../repository/ProjectImageRepository.java | 2 +- .../service/ProjectImageService.java | 12 ++++++++++- .../generation/service/ProjectService.java | 3 +-- 6 files changed, 35 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/cotato/csquiz/api/project/controller/ProjectController.java b/src/main/java/org/cotato/csquiz/api/project/controller/ProjectController.java index aa9536da..1024c22f 100644 --- a/src/main/java/org/cotato/csquiz/api/project/controller/ProjectController.java +++ b/src/main/java/org/cotato/csquiz/api/project/controller/ProjectController.java @@ -54,7 +54,7 @@ public ResponseEntity createProject(@RequestBody @Valid C @PostMapping(value = "/images", consumes = "multipart/form-data") public ResponseEntity createProjectImage(@ModelAttribute CreateProjectImageRequest request) throws ImageException { - projectImageService.createProjectImage(request.projectId(), request.logoImage(), request.thumbNailImage()); + projectImageService.createProjectImage(request.projectId(), request.logoImage(), request.thumbNailImage(), request.detailImages()); return ResponseEntity.status(HttpStatus.CREATED).build(); } } diff --git a/src/main/java/org/cotato/csquiz/api/project/dto/CreateProjectImageRequest.java b/src/main/java/org/cotato/csquiz/api/project/dto/CreateProjectImageRequest.java index 0a0bf4cc..0429766a 100644 --- a/src/main/java/org/cotato/csquiz/api/project/dto/CreateProjectImageRequest.java +++ b/src/main/java/org/cotato/csquiz/api/project/dto/CreateProjectImageRequest.java @@ -1,10 +1,12 @@ package org.cotato.csquiz.api.project.dto; +import java.util.List; import org.springframework.web.multipart.MultipartFile; public record CreateProjectImageRequest( Long projectId, MultipartFile logoImage, - MultipartFile thumbNailImage + MultipartFile thumbNailImage, + List detailImages ) { } diff --git a/src/main/java/org/cotato/csquiz/domain/generation/entity/ProjectImage.java b/src/main/java/org/cotato/csquiz/domain/generation/entity/ProjectImage.java index ff628f69..7a68e5f1 100644 --- a/src/main/java/org/cotato/csquiz/domain/generation/entity/ProjectImage.java +++ b/src/main/java/org/cotato/csquiz/domain/generation/entity/ProjectImage.java @@ -35,18 +35,23 @@ public class ProjectImage { @Column(name = "project_id", nullable = false) private Long projectId; + @Column(name = "project_image_order") + private Integer imageOrder; + @Builder - public ProjectImage(ProjectImageType projectImageType, S3Info s3Info, Long projectId) { + public ProjectImage(ProjectImageType projectImageType, S3Info s3Info, Long projectId, Integer imageOrder) { this.projectImageType = projectImageType; this.s3Info = s3Info; this.projectId = projectId; + this.imageOrder = imageOrder; } public static ProjectImage logoImage(S3Info imageInfo, Long projectId) { return new ProjectImage( ProjectImageType.LOGO, imageInfo, - projectId + projectId, + null ); } @@ -54,7 +59,17 @@ public static ProjectImage thumbNailImage(S3Info thumbNailInfo, Long projectId) return new ProjectImage( ProjectImageType.THUMBNAIL, thumbNailInfo, - projectId + projectId, + null + ); + } + + public static ProjectImage detailImage(S3Info detailImageInfo, Long projectId, Integer order) { + return new ProjectImage( + ProjectImageType.DETAIL, + detailImageInfo, + projectId, + order ); } } diff --git a/src/main/java/org/cotato/csquiz/domain/generation/repository/ProjectImageRepository.java b/src/main/java/org/cotato/csquiz/domain/generation/repository/ProjectImageRepository.java index 2bfb7486..acbc9b2e 100644 --- a/src/main/java/org/cotato/csquiz/domain/generation/repository/ProjectImageRepository.java +++ b/src/main/java/org/cotato/csquiz/domain/generation/repository/ProjectImageRepository.java @@ -6,6 +6,6 @@ import org.springframework.data.jpa.repository.JpaRepository; public interface ProjectImageRepository extends JpaRepository { - List findAllByProjectId(Long projectId); + List findByProjectIdOrderByImageOrderAsc(Long projectId); List findAllByProjectIdInAndProjectImageType(List projectIds, ProjectImageType projectImageType); } diff --git a/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectImageService.java b/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectImageService.java index 622f6683..314c8872 100644 --- a/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectImageService.java +++ b/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectImageService.java @@ -24,7 +24,7 @@ public class ProjectImageService { private final ProjectImageRepository projectImageRepository; @Transactional - public void createProjectImage(Long projectId, MultipartFile logoImage, MultipartFile thumbNailImage) + public void createProjectImage(Long projectId, MultipartFile logoImage, MultipartFile thumbNailImage, List detailImages) throws ImageException { List newImages = new ArrayList<>(); @@ -36,6 +36,16 @@ public void createProjectImage(Long projectId, MultipartFile logoImage, Multipar S3Info thumbNailInfo = s3Uploader.uploadFiles(webpThumbNailImage, PROJECT_IMAGE); newImages.add(ProjectImage.thumbNailImage(thumbNailInfo, projectId)); + if (detailImages != null && !detailImages.isEmpty()) { + int order = 1; + for (MultipartFile detailImage : detailImages) { + File webpDetailImage = convertToWebp(convert(detailImage)); + S3Info detailImageInfo = s3Uploader.uploadFiles(webpDetailImage, PROJECT_IMAGE); + newImages.add(ProjectImage.detailImage(detailImageInfo, projectId, order)); + order++; + } + } + projectImageRepository.saveAll(newImages); } } diff --git a/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectService.java b/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectService.java index b737fbd0..a5f02df7 100644 --- a/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectService.java +++ b/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectService.java @@ -27,7 +27,6 @@ @RequiredArgsConstructor public class ProjectService { - private final ProjectImageService projectImageService; private final ProjectMemberService projectMemberService; private final ProjectRepository projectRepository; private final ProjectImageRepository projectImageRepository; @@ -40,7 +39,7 @@ public ProjectDetailResponse getProjectDetail(Long projectId) { Project project = projectRepository.findById(projectId) .orElseThrow(() -> new EntityNotFoundException("찾으려는 프로젝트가 존재하지 않습니다.")); - List images = projectImageRepository.findAllByProjectId(projectId); + List images = projectImageRepository.findByProjectIdOrderByImageOrderAsc(projectId); List members = projectMemberRepository.findAllByProjectId(projectId); Generation generation = generationRepository.findById(project.getGenerationId()) .orElseThrow(() -> new EntityNotFoundException("해당 기수를 찾을 수 없습니다.")); From d118e11772c953633563be7e34cfc6b8c023a37b Mon Sep 17 00:00:00 2001 From: yunhacandy Date: Sat, 14 Sep 2024 23:48:55 +0900 Subject: [PATCH 2/8] =?UTF-8?q?refactor:=20jpa=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=EB=AA=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/generation/repository/ProjectImageRepository.java | 2 +- .../cotato/csquiz/domain/generation/service/ProjectService.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/cotato/csquiz/domain/generation/repository/ProjectImageRepository.java b/src/main/java/org/cotato/csquiz/domain/generation/repository/ProjectImageRepository.java index acbc9b2e..e409d431 100644 --- a/src/main/java/org/cotato/csquiz/domain/generation/repository/ProjectImageRepository.java +++ b/src/main/java/org/cotato/csquiz/domain/generation/repository/ProjectImageRepository.java @@ -6,6 +6,6 @@ import org.springframework.data.jpa.repository.JpaRepository; public interface ProjectImageRepository extends JpaRepository { - List findByProjectIdOrderByImageOrderAsc(Long projectId); + List findAllByProjectIdOrderByImageOrderAsc(Long projectId); List findAllByProjectIdInAndProjectImageType(List projectIds, ProjectImageType projectImageType); } diff --git a/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectService.java b/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectService.java index a5f02df7..d782ecf3 100644 --- a/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectService.java +++ b/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectService.java @@ -39,7 +39,7 @@ public ProjectDetailResponse getProjectDetail(Long projectId) { Project project = projectRepository.findById(projectId) .orElseThrow(() -> new EntityNotFoundException("찾으려는 프로젝트가 존재하지 않습니다.")); - List images = projectImageRepository.findByProjectIdOrderByImageOrderAsc(projectId); + List images = projectImageRepository.findAllByProjectIdOrderByImageOrderAsc(projectId); List members = projectMemberRepository.findAllByProjectId(projectId); Generation generation = generationRepository.findById(project.getGenerationId()) .orElseThrow(() -> new EntityNotFoundException("해당 기수를 찾을 수 없습니다.")); From 8b275a38685d8ba9e378a71a254d8282c7282a92 Mon Sep 17 00:00:00 2001 From: yunhacandy Date: Sun, 15 Sep 2024 01:10:38 +0900 Subject: [PATCH 3/8] =?UTF-8?q?refactor:=20detail=20=EC=9D=B4=EB=AF=B8?= =?UTF-8?q?=EC=A7=80=20=EC=97=85=EB=A1=9C=EB=93=9C=20=EC=8B=9C=20for?= =?UTF-8?q?=EB=AC=B8=20=EC=9D=B8=EB=8D=B1=EC=8A=A4=EB=A5=BC=20=ED=99=9C?= =?UTF-8?q?=EC=9A=A9=ED=95=98=EC=97=AC=20=EC=88=9C=EC=84=9C=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/generation/service/ProjectImageService.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectImageService.java b/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectImageService.java index 314c8872..718001ce 100644 --- a/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectImageService.java +++ b/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectImageService.java @@ -37,12 +37,11 @@ public void createProjectImage(Long projectId, MultipartFile logoImage, Multipar newImages.add(ProjectImage.thumbNailImage(thumbNailInfo, projectId)); if (detailImages != null && !detailImages.isEmpty()) { - int order = 1; - for (MultipartFile detailImage : detailImages) { + for (int i = 0; i < detailImages.size(); i++) { + MultipartFile detailImage = detailImages.get(i); File webpDetailImage = convertToWebp(convert(detailImage)); S3Info detailImageInfo = s3Uploader.uploadFiles(webpDetailImage, PROJECT_IMAGE); - newImages.add(ProjectImage.detailImage(detailImageInfo, projectId, order)); - order++; + newImages.add(ProjectImage.detailImage(detailImageInfo, projectId, i + 1)); } } From ae52ed8dda66d8cb705ca0e662dee27365db6c76 Mon Sep 17 00:00:00 2001 From: yunhacandy Date: Mon, 16 Sep 2024 18:19:07 +0900 Subject: [PATCH 4/8] =?UTF-8?q?refactor:=20ProjectImage=EC=9D=98=20imageOr?= =?UTF-8?q?der=20=EC=B2=98=EB=A6=AC=20=EB=B0=8F=20=EA=B8=B0=EB=B3=B8?= =?UTF-8?q?=EA=B0=92=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ProjectImageInfoResponse에 imageOrder에 대한 정보 추가 - 로고와 썸네일 이미지는 imageOrder가 필요하지 않으나 일관성을 위해 기본값 0으로 설정. --- .../csquiz/api/project/dto/ProjectImageInfoResponse.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/cotato/csquiz/api/project/dto/ProjectImageInfoResponse.java b/src/main/java/org/cotato/csquiz/api/project/dto/ProjectImageInfoResponse.java index b9b7905e..6a493e16 100644 --- a/src/main/java/org/cotato/csquiz/api/project/dto/ProjectImageInfoResponse.java +++ b/src/main/java/org/cotato/csquiz/api/project/dto/ProjectImageInfoResponse.java @@ -6,13 +6,15 @@ public record ProjectImageInfoResponse( Long imageId, String imageUrl, - ProjectImageType projectImageType + ProjectImageType projectImageType, + Integer imageOrder ) { public static ProjectImageInfoResponse from(ProjectImage projectImage) { return new ProjectImageInfoResponse( projectImage.getId(), projectImage.getS3Info().getUrl(), - projectImage.getProjectImageType() + projectImage.getProjectImageType(), + projectImage.getImageOrder() != null ? projectImage.getImageOrder() : 0 ); } } From 5a8ef33c231f6a5d31fe14e81fe1fe0d1559a86e Mon Sep 17 00:00:00 2001 From: yunhacandy Date: Mon, 16 Sep 2024 20:59:38 +0900 Subject: [PATCH 5/8] =?UTF-8?q?refactor:=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20?= =?UTF-8?q?=EC=88=9C=EC=84=9C=20=EA=B4=80=ED=95=9C=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - imageOrder의 기본값을 1로 설정 - 기본값 변경으로 인해 프로젝트 상세 정보 중 이미지 가져올때 오름차순 신경 안쓰고 projectId로 한번에 가져오게 수정 - DB에 null 값 최소화하기 위해 원시타입 사용 - 원시타입 사용으로 인해 null 체크 삭제 - 중복되는 로직 통합 --- .../project/dto/ProjectImageInfoResponse.java | 4 +-- .../generation/entity/ProjectImage.java | 26 +++--------------- .../repository/ProjectImageRepository.java | 2 +- .../service/ProjectImageService.java | 27 ++++++++++--------- .../generation/service/ProjectService.java | 2 +- 5 files changed, 22 insertions(+), 39 deletions(-) diff --git a/src/main/java/org/cotato/csquiz/api/project/dto/ProjectImageInfoResponse.java b/src/main/java/org/cotato/csquiz/api/project/dto/ProjectImageInfoResponse.java index 6a493e16..2795722c 100644 --- a/src/main/java/org/cotato/csquiz/api/project/dto/ProjectImageInfoResponse.java +++ b/src/main/java/org/cotato/csquiz/api/project/dto/ProjectImageInfoResponse.java @@ -7,14 +7,14 @@ public record ProjectImageInfoResponse( Long imageId, String imageUrl, ProjectImageType projectImageType, - Integer imageOrder + int imageOrder ) { public static ProjectImageInfoResponse from(ProjectImage projectImage) { return new ProjectImageInfoResponse( projectImage.getId(), projectImage.getS3Info().getUrl(), projectImage.getProjectImageType(), - projectImage.getImageOrder() != null ? projectImage.getImageOrder() : 0 + projectImage.getImageOrder() ); } } diff --git a/src/main/java/org/cotato/csquiz/domain/generation/entity/ProjectImage.java b/src/main/java/org/cotato/csquiz/domain/generation/entity/ProjectImage.java index 7a68e5f1..534c6e83 100644 --- a/src/main/java/org/cotato/csquiz/domain/generation/entity/ProjectImage.java +++ b/src/main/java/org/cotato/csquiz/domain/generation/entity/ProjectImage.java @@ -36,7 +36,7 @@ public class ProjectImage { private Long projectId; @Column(name = "project_image_order") - private Integer imageOrder; + private int imageOrder = 1; @Builder public ProjectImage(ProjectImageType projectImageType, S3Info s3Info, Long projectId, Integer imageOrder) { @@ -46,30 +46,12 @@ public ProjectImage(ProjectImageType projectImageType, S3Info s3Info, Long proje this.imageOrder = imageOrder; } - public static ProjectImage logoImage(S3Info imageInfo, Long projectId) { + public static ProjectImage createProjectImage(ProjectImageType projectImageType, S3Info imageInfo, Long projectId, int imageOrder) { return new ProjectImage( - ProjectImageType.LOGO, + projectImageType, imageInfo, projectId, - null - ); - } - - public static ProjectImage thumbNailImage(S3Info thumbNailInfo, Long projectId) { - return new ProjectImage( - ProjectImageType.THUMBNAIL, - thumbNailInfo, - projectId, - null - ); - } - - public static ProjectImage detailImage(S3Info detailImageInfo, Long projectId, Integer order) { - return new ProjectImage( - ProjectImageType.DETAIL, - detailImageInfo, - projectId, - order + imageOrder ); } } diff --git a/src/main/java/org/cotato/csquiz/domain/generation/repository/ProjectImageRepository.java b/src/main/java/org/cotato/csquiz/domain/generation/repository/ProjectImageRepository.java index e409d431..2bfb7486 100644 --- a/src/main/java/org/cotato/csquiz/domain/generation/repository/ProjectImageRepository.java +++ b/src/main/java/org/cotato/csquiz/domain/generation/repository/ProjectImageRepository.java @@ -6,6 +6,6 @@ import org.springframework.data.jpa.repository.JpaRepository; public interface ProjectImageRepository extends JpaRepository { - List findAllByProjectIdOrderByImageOrderAsc(Long projectId); + List findAllByProjectId(Long projectId); List findAllByProjectIdInAndProjectImageType(List projectIds, ProjectImageType projectImageType); } diff --git a/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectImageService.java b/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectImageService.java index 718001ce..eabf44f3 100644 --- a/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectImageService.java +++ b/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectImageService.java @@ -1,6 +1,7 @@ package org.cotato.csquiz.domain.generation.service; -import static org.cotato.csquiz.common.util.FileUtil.*; +import static org.cotato.csquiz.common.util.FileUtil.convert; +import static org.cotato.csquiz.common.util.FileUtil.convertToWebp; import java.io.File; import java.util.ArrayList; @@ -10,6 +11,7 @@ import org.cotato.csquiz.common.error.exception.ImageException; import org.cotato.csquiz.common.s3.S3Uploader; import org.cotato.csquiz.domain.generation.entity.ProjectImage; +import org.cotato.csquiz.domain.generation.enums.ProjectImageType; import org.cotato.csquiz.domain.generation.repository.ProjectImageRepository; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -28,23 +30,22 @@ public void createProjectImage(Long projectId, MultipartFile logoImage, Multipar throws ImageException { List newImages = new ArrayList<>(); - File webpLogoImage = convertToWebp(convert(logoImage)); - S3Info logoImageInfo = s3Uploader.uploadFiles(webpLogoImage, PROJECT_IMAGE); - newImages.add(ProjectImage.logoImage(logoImageInfo, projectId)); - - File webpThumbNailImage = convertToWebp(convert(thumbNailImage)); - S3Info thumbNailInfo = s3Uploader.uploadFiles(webpThumbNailImage, PROJECT_IMAGE); - newImages.add(ProjectImage.thumbNailImage(thumbNailInfo, projectId)); + addImage(newImages, logoImage, ProjectImageType.LOGO, projectId, 1); + addImage(newImages, thumbNailImage, ProjectImageType.THUMBNAIL, projectId, 1); if (detailImages != null && !detailImages.isEmpty()) { - for (int i = 0; i < detailImages.size(); i++) { - MultipartFile detailImage = detailImages.get(i); - File webpDetailImage = convertToWebp(convert(detailImage)); - S3Info detailImageInfo = s3Uploader.uploadFiles(webpDetailImage, PROJECT_IMAGE); - newImages.add(ProjectImage.detailImage(detailImageInfo, projectId, i + 1)); + for (int orderIndex = 1; orderIndex <= detailImages.size(); orderIndex++) { + MultipartFile detailImage = detailImages.get(orderIndex - 1); + addImage(newImages, detailImage, ProjectImageType.DETAIL, projectId, orderIndex); } } projectImageRepository.saveAll(newImages); } + + private void addImage( List newImages, MultipartFile image, ProjectImageType imageType, Long projectId, int imageOrder) throws ImageException { + File webpImage = convertToWebp(convert(image)); + S3Info ImageInfo = s3Uploader.uploadFiles(webpImage, PROJECT_IMAGE); + newImages.add(ProjectImage.createProjectImage(imageType, ImageInfo, projectId, imageOrder)); + } } diff --git a/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectService.java b/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectService.java index d782ecf3..234fd85d 100644 --- a/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectService.java +++ b/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectService.java @@ -39,7 +39,7 @@ public ProjectDetailResponse getProjectDetail(Long projectId) { Project project = projectRepository.findById(projectId) .orElseThrow(() -> new EntityNotFoundException("찾으려는 프로젝트가 존재하지 않습니다.")); - List images = projectImageRepository.findAllByProjectIdOrderByImageOrderAsc(projectId); + List images = projectImageRepository.findAllByProjectId(projectId); List members = projectMemberRepository.findAllByProjectId(projectId); Generation generation = generationRepository.findById(project.getGenerationId()) .orElseThrow(() -> new EntityNotFoundException("해당 기수를 찾을 수 없습니다.")); From 61457befda6993561c78d3c67224d9f7d1cda7e5 Mon Sep 17 00:00:00 2001 From: yunhacandy Date: Mon, 16 Sep 2024 21:57:27 +0900 Subject: [PATCH 6/8] =?UTF-8?q?refactor:=20ProjectImage=20=EC=97=94?= =?UTF-8?q?=ED=8B=B0=ED=8B=B0=20=EC=A0=95=EC=A0=81=20=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A6=AC=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=ED=95=98=EA=B2=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../generation/entity/ProjectImage.java | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/cotato/csquiz/domain/generation/entity/ProjectImage.java b/src/main/java/org/cotato/csquiz/domain/generation/entity/ProjectImage.java index 534c6e83..b6a273a0 100644 --- a/src/main/java/org/cotato/csquiz/domain/generation/entity/ProjectImage.java +++ b/src/main/java/org/cotato/csquiz/domain/generation/entity/ProjectImage.java @@ -46,9 +46,25 @@ public ProjectImage(ProjectImageType projectImageType, S3Info s3Info, Long proje this.imageOrder = imageOrder; } - public static ProjectImage createProjectImage(ProjectImageType projectImageType, S3Info imageInfo, Long projectId, int imageOrder) { + public static ProjectImage logoImage(S3Info s3Info, Long projectId) { return new ProjectImage( - projectImageType, + ProjectImageType.LOGO, + s3Info, + projectId, + 1); + } + + public static ProjectImage thumbnailImage(S3Info s3Info, Long projectId) { + return new ProjectImage( + ProjectImageType.THUMBNAIL, + s3Info, + projectId, + 1); + } + + public static ProjectImage detailImage(S3Info imageInfo, Long projectId, int imageOrder) { + return new ProjectImage( + ProjectImageType.DETAIL, imageInfo, projectId, imageOrder From d8345d7ecc829af82440b0c6a54e8ea19a9b25c1 Mon Sep 17 00:00:00 2001 From: yunhacandy Date: Mon, 16 Sep 2024 21:59:32 +0900 Subject: [PATCH 7/8] =?UTF-8?q?refactor:=20project=20image=20order?= =?UTF-8?q?=EC=97=90=20=EB=8C=80=ED=95=9C=20=EC=9E=90=EB=A3=8C=ED=98=95=20?= =?UTF-8?q?=ED=86=B5=EC=9D=BC=20=EB=B0=8F=20=EC=A0=9C=EC=95=BD=20=EC=A1=B0?= =?UTF-8?q?=EA=B1=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../csquiz/domain/generation/entity/ProjectImage.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/cotato/csquiz/domain/generation/entity/ProjectImage.java b/src/main/java/org/cotato/csquiz/domain/generation/entity/ProjectImage.java index b6a273a0..fe7dd1ca 100644 --- a/src/main/java/org/cotato/csquiz/domain/generation/entity/ProjectImage.java +++ b/src/main/java/org/cotato/csquiz/domain/generation/entity/ProjectImage.java @@ -35,11 +35,10 @@ public class ProjectImage { @Column(name = "project_id", nullable = false) private Long projectId; - @Column(name = "project_image_order") - private int imageOrder = 1; + @Column(name = "project_image_order", nullable = false) + private int imageOrder; - @Builder - public ProjectImage(ProjectImageType projectImageType, S3Info s3Info, Long projectId, Integer imageOrder) { + private ProjectImage(ProjectImageType projectImageType, S3Info s3Info, Long projectId, int imageOrder) { this.projectImageType = projectImageType; this.s3Info = s3Info; this.projectId = projectId; From ceeaf801e0e0dd2297e499bffef462560cf4e1a8 Mon Sep 17 00:00:00 2001 From: yunhacandy Date: Mon, 16 Sep 2024 22:02:24 +0900 Subject: [PATCH 8/8] =?UTF-8?q?refactor:=20addImage=20=EB=A9=94=EC=84=9C?= =?UTF-8?q?=EB=93=9C=20=EC=A0=9C=EA=B1=B0=20=EB=B0=8F=20=EC=A7=81=EC=A0=91?= =?UTF-8?q?=EC=A0=81=EC=9D=B8=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20=EB=B0=A9=EC=8B=9D=EC=9C=BC=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../generation/entity/ProjectImage.java | 1 - .../service/ProjectImageService.java | 23 ++++++++++--------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/cotato/csquiz/domain/generation/entity/ProjectImage.java b/src/main/java/org/cotato/csquiz/domain/generation/entity/ProjectImage.java index fe7dd1ca..6622d05c 100644 --- a/src/main/java/org/cotato/csquiz/domain/generation/entity/ProjectImage.java +++ b/src/main/java/org/cotato/csquiz/domain/generation/entity/ProjectImage.java @@ -9,7 +9,6 @@ import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import lombok.AccessLevel; -import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import org.cotato.csquiz.common.entity.S3Info; diff --git a/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectImageService.java b/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectImageService.java index eabf44f3..ba1205cf 100644 --- a/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectImageService.java +++ b/src/main/java/org/cotato/csquiz/domain/generation/service/ProjectImageService.java @@ -11,7 +11,6 @@ import org.cotato.csquiz.common.error.exception.ImageException; import org.cotato.csquiz.common.s3.S3Uploader; import org.cotato.csquiz.domain.generation.entity.ProjectImage; -import org.cotato.csquiz.domain.generation.enums.ProjectImageType; import org.cotato.csquiz.domain.generation.repository.ProjectImageRepository; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -26,26 +25,28 @@ public class ProjectImageService { private final ProjectImageRepository projectImageRepository; @Transactional - public void createProjectImage(Long projectId, MultipartFile logoImage, MultipartFile thumbNailImage, List detailImages) + public void createProjectImage(Long projectId, MultipartFile logoImage, MultipartFile thumbNailImage, + List detailImages) throws ImageException { List newImages = new ArrayList<>(); - addImage(newImages, logoImage, ProjectImageType.LOGO, projectId, 1); - addImage(newImages, thumbNailImage, ProjectImageType.THUMBNAIL, projectId, 1); + File webpLogoImage = convertToWebp(convert(logoImage)); + S3Info logoImageInfo = s3Uploader.uploadFiles(webpLogoImage, PROJECT_IMAGE); + newImages.add(ProjectImage.logoImage(logoImageInfo, projectId)); + + File webpThumbNailImage = convertToWebp(convert(thumbNailImage)); + S3Info thumbNailInfo = s3Uploader.uploadFiles(webpThumbNailImage, PROJECT_IMAGE); + newImages.add(ProjectImage.thumbnailImage(thumbNailInfo, projectId)); if (detailImages != null && !detailImages.isEmpty()) { for (int orderIndex = 1; orderIndex <= detailImages.size(); orderIndex++) { MultipartFile detailImage = detailImages.get(orderIndex - 1); - addImage(newImages, detailImage, ProjectImageType.DETAIL, projectId, orderIndex); + File webpDetailImage = convertToWebp(convert(detailImage)); + S3Info detailImageInfo = s3Uploader.uploadFiles(webpDetailImage, PROJECT_IMAGE); + newImages.add(ProjectImage.detailImage(detailImageInfo, projectId, orderIndex)); } } projectImageRepository.saveAll(newImages); } - - private void addImage( List newImages, MultipartFile image, ProjectImageType imageType, Long projectId, int imageOrder) throws ImageException { - File webpImage = convertToWebp(convert(image)); - S3Info ImageInfo = s3Uploader.uploadFiles(webpImage, PROJECT_IMAGE); - newImages.add(ProjectImage.createProjectImage(imageType, ImageInfo, projectId, imageOrder)); - } }