From 63a7899e57cfc287839fafaca451a5395dd007b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=86=90=ED=99=8D=EC=84=9D?= <78216059+bayy1216@users.noreply.github.com> Date: Mon, 30 Sep 2024 13:29:01 +0900 Subject: [PATCH] =?UTF-8?q?[Feat]:=20=EC=B1=8C=EB=A6=B0=EC=A7=80=EA=B7=B8?= =?UTF-8?q?=EB=A3=B9=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EB=93=B1=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/AdminController.java | 15 ++++++++++++++ .../domain/ChallengeGroupImage.java | 6 ++++++ .../application/ChallengeGroupService.java | 20 +++++++++++++++++++ .../domain/port/ChallengeGroupImageStore.java | 10 ++++++++++ .../ChallengeGroupImageRepository.java | 1 + ...> ChallengeGroupImageReaderStoreImpl.java} | 13 +++++++++++- 6 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/challengegroup/domain/port/ChallengeGroupImageStore.java rename zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/challengegroup/infrastructure/adapter/{ChallengeGroupImageReaderImpl.java => ChallengeGroupImageReaderStoreImpl.java} (57%) diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/admin/controller/AdminController.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/admin/controller/AdminController.java index bfed8b1..f2d86ca 100644 --- a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/admin/controller/AdminController.java +++ b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/admin/controller/AdminController.java @@ -10,6 +10,7 @@ import org.haedal.zzansuni.challengegroup.domain.application.ChallengeGroupService; import org.haedal.zzansuni.common.controller.PagingRequest; import org.haedal.zzansuni.common.controller.PagingResponse; +import org.haedal.zzansuni.common.domain.ImageUploader; import org.haedal.zzansuni.core.api.ApiResponse; import org.haedal.zzansuni.user.domain.UserModel; import org.haedal.zzansuni.user.domain.UserService; @@ -18,6 +19,7 @@ import org.haedal.zzansuni.userchallenge.domain.application.ChallengeVerificationService; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -30,6 +32,7 @@ public class AdminController { private final ChallengeGroupService challengeGroupService; private final UserService userService; private final ChallengeVerificationService challengeVerificationService; + private final ImageUploader imageUploader; @ResponseStatus(HttpStatus.CREATED) @Operation(summary = "매니저 등록", description = "매니저를 등록한다.") @@ -91,4 +94,16 @@ public ApiResponse approveChallengeVerification(@PathVariable Long challen return ApiResponse.success(null, "챌린지 인증 승인/거절 성공"); } + @ResponseStatus(HttpStatus.OK) + @Operation(summary = "챌린지 그룹 이미지 등록", description = "챌린지 그룹 이미지를 등록 UPSERT") + @PostMapping("/api/admin/challengeGroups/{challengeGroupId}/image") + public ApiResponse createChallengeGroupImage(@PathVariable Long challengeGroupId, + List images) { + List imageUrls = images.stream() + .map(imageUploader::upload) + .toList(); + challengeGroupService.updateChallengeGroupImages(challengeGroupId, imageUrls); + return ApiResponse.success(null, "챌린지 그룹 이미지 등록 성공"); + } + } diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/challengegroup/domain/ChallengeGroupImage.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/challengegroup/domain/ChallengeGroupImage.java index f0ff955..9b072e7 100644 --- a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/challengegroup/domain/ChallengeGroupImage.java +++ b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/challengegroup/domain/ChallengeGroupImage.java @@ -26,4 +26,10 @@ public class ChallengeGroupImage extends BaseTimeEntity { @JoinColumn(name = "challenge_group_id", nullable = false) private ChallengeGroup challengeGroup; + public static ChallengeGroupImage create(ChallengeGroup challengeGroup, String imageUrl) { + return ChallengeGroupImage.builder() + .challengeGroup(challengeGroup) + .imageUrl(imageUrl) + .build(); + } } diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/challengegroup/domain/application/ChallengeGroupService.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/challengegroup/domain/application/ChallengeGroupService.java index fbf0715..54e1ff3 100644 --- a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/challengegroup/domain/application/ChallengeGroupService.java +++ b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/challengegroup/domain/application/ChallengeGroupService.java @@ -3,17 +3,22 @@ import lombok.RequiredArgsConstructor; import org.haedal.zzansuni.challengegroup.domain.ChallengeGroup; import org.haedal.zzansuni.challengegroup.domain.ChallengeGroupCommand; +import org.haedal.zzansuni.challengegroup.domain.ChallengeGroupImage; +import org.haedal.zzansuni.challengegroup.domain.port.ChallengeGroupImageStore; import org.haedal.zzansuni.challengegroup.domain.port.ChallengeGroupReader; import org.haedal.zzansuni.challengegroup.domain.port.ChallengeGroupStore; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + @Service @RequiredArgsConstructor public class ChallengeGroupService { private final ChallengeGroupStore challengeGroupStore; private final ChallengeGroupReader challengeGroupReader; + private final ChallengeGroupImageStore challengeGroupImageStore; @Transactional public void createChallengeGroup(ChallengeGroupCommand.Create command) { @@ -33,4 +38,19 @@ public void updateChallengeGroup(ChallengeGroupCommand.Update command) { ChallengeGroup challengeGroup = challengeGroupReader.getById(command.getId()); challengeGroup.update(command); } + + /** + * 1. 기존 이미지 삭제 + * 2. 새로운 이미지 저장 + */ + @Transactional + public void updateChallengeGroupImages(Long challengeGroupId, List imageUrls) { + ChallengeGroup challengeGroup = challengeGroupReader.getById(challengeGroupId); + + challengeGroupImageStore.deleteAllByChallengeGroupId(challengeGroupId); + List challengeGroupImages = imageUrls.stream() + .map(imageUrl -> ChallengeGroupImage.create(challengeGroup, imageUrl)) + .toList(); + challengeGroupImageStore.saveAll(challengeGroupImages); + } } diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/challengegroup/domain/port/ChallengeGroupImageStore.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/challengegroup/domain/port/ChallengeGroupImageStore.java new file mode 100644 index 0000000..bfe3c7e --- /dev/null +++ b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/challengegroup/domain/port/ChallengeGroupImageStore.java @@ -0,0 +1,10 @@ +package org.haedal.zzansuni.challengegroup.domain.port; + +import org.haedal.zzansuni.challengegroup.domain.ChallengeGroupImage; + +import java.util.List; + +public interface ChallengeGroupImageStore { + void saveAll(List challengeGroupImages); + void deleteAllByChallengeGroupId(Long challengeGroupId); +} diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/challengegroup/infrastructure/ChallengeGroupImageRepository.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/challengegroup/infrastructure/ChallengeGroupImageRepository.java index 050991e..31954c4 100644 --- a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/challengegroup/infrastructure/ChallengeGroupImageRepository.java +++ b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/challengegroup/infrastructure/ChallengeGroupImageRepository.java @@ -7,4 +7,5 @@ public interface ChallengeGroupImageRepository extends JpaRepository { List findByChallengeGroupId(Long challengeGroupId); + void deleteAllByChallengeGroupId(Long challengeGroupId); } diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/challengegroup/infrastructure/adapter/ChallengeGroupImageReaderImpl.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/challengegroup/infrastructure/adapter/ChallengeGroupImageReaderStoreImpl.java similarity index 57% rename from zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/challengegroup/infrastructure/adapter/ChallengeGroupImageReaderImpl.java rename to zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/challengegroup/infrastructure/adapter/ChallengeGroupImageReaderStoreImpl.java index 059fd02..98330e6 100644 --- a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/challengegroup/infrastructure/adapter/ChallengeGroupImageReaderImpl.java +++ b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/challengegroup/infrastructure/adapter/ChallengeGroupImageReaderStoreImpl.java @@ -3,6 +3,7 @@ import lombok.RequiredArgsConstructor; import org.haedal.zzansuni.challengegroup.domain.ChallengeGroupImage; import org.haedal.zzansuni.challengegroup.domain.port.ChallengeGroupImageReader; +import org.haedal.zzansuni.challengegroup.domain.port.ChallengeGroupImageStore; import org.haedal.zzansuni.challengegroup.infrastructure.ChallengeGroupImageRepository; import org.springframework.stereotype.Component; @@ -10,10 +11,20 @@ @RequiredArgsConstructor @Component -public class ChallengeGroupImageReaderImpl implements ChallengeGroupImageReader { +public class ChallengeGroupImageReaderStoreImpl implements ChallengeGroupImageReader, ChallengeGroupImageStore { private final ChallengeGroupImageRepository challengeGroupImageRepository; @Override public List getByChallengeGroupId(Long challengeGroupId) { return challengeGroupImageRepository.findByChallengeGroupId(challengeGroupId); } + + @Override + public void saveAll(List challengeGroupImages) { + challengeGroupImageRepository.saveAll(challengeGroupImages); + } + + @Override + public void deleteAllByChallengeGroupId(Long challengeGroupId) { + challengeGroupImageRepository.deleteAllByChallengeGroupId(challengeGroupId); + } }