From 710a5ee555f5e55ea641a88fab7f20006c1ceb95 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: Sat, 1 Jun 2024 15:17:15 +0900 Subject: [PATCH 1/3] =?UTF-8?q?[Refactor]:=20=EC=B1=8C=EB=A6=B0=EC=A7=80?= =?UTF-8?q?=20=EC=9D=B8=EC=A6=9D=20OneToMany=EB=A1=9C=20=EB=A6=AC=ED=8C=A9?= =?UTF-8?q?=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../challenge/ChallengeController.java | 7 ++- .../haedal/zzansuni/domain/ImageUploader.java | 7 +++ .../challenge/ChallengeCommand.java | 21 +++++++++ .../ChallengeVerification.java | 23 +++------- .../ChallengeVerificationStore.java | 7 --- .../userchallenge/UserChallenge.java | 44 ++++++++++--------- .../userchallenge/UserChallengeReader.java | 1 + .../userchallenge/UserChallengeService.java | 31 ++++--------- .../zzansuni/infrastructure/FakeUploader.java | 15 +++++++ .../ChallengeVerificationStoreImpl.java | 18 -------- .../UserChallengeReaderImpl.java | 12 ++++- .../UserChallengeRepository.java | 11 +++++ 12 files changed, 107 insertions(+), 90 deletions(-) create mode 100644 zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/ImageUploader.java delete mode 100644 zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/challengeverification/ChallengeVerificationStore.java create mode 100644 zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/infrastructure/FakeUploader.java delete mode 100644 zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/infrastructure/challengegroup/challengeverification/ChallengeVerificationStoreImpl.java diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/controller/challengegroup/challenge/ChallengeController.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/controller/challengegroup/challenge/ChallengeController.java index c8ad834..523166b 100644 --- a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/controller/challengegroup/challenge/ChallengeController.java +++ b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/controller/challengegroup/challenge/ChallengeController.java @@ -8,6 +8,7 @@ import org.haedal.zzansuni.controller.PagingRequest; import org.haedal.zzansuni.controller.PagingResponse; import org.haedal.zzansuni.core.api.ApiResponse; +import org.haedal.zzansuni.domain.ImageUploader; import org.haedal.zzansuni.domain.challengegroup.challenge.ChallengeCommand; import org.haedal.zzansuni.domain.challengegroup.challenge.ChallengeModel; import org.haedal.zzansuni.domain.challengegroup.challenge.ChallengeService; @@ -26,6 +27,7 @@ public class ChallengeController { private final ChallengeService challengeService; private final UserChallengeService userChallengeService; + private final ImageUploader imageUploader; @ResponseStatus(HttpStatus.CREATED) @Operation(summary = "챌린지 참여", description = "챌린지에 참여한다.") @@ -47,8 +49,9 @@ public ApiResponse challengeVerifica @RequestPart("image") MultipartFile image ) { ChallengeCommand.Verificate command = request.toCommand(image); - ChallengeModel.ChallengeVerificationResult model = userChallengeService.verification( - userChallengeId, command); + String imageUrl = imageUploader.upload(command.getImage()); + ChallengeCommand.VerificationCreate afterUpload = command.afterUpload(imageUrl); + var model = userChallengeService.verification(userChallengeId, afterUpload); var response = ChallengeRes.ChallengeVerificationResponse.from(model); return ApiResponse.success(response, "챌린지 인증에 성공하였습니다."); } diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/ImageUploader.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/ImageUploader.java new file mode 100644 index 0000000..5ca9a0b --- /dev/null +++ b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/ImageUploader.java @@ -0,0 +1,7 @@ +package org.haedal.zzansuni.domain; + +import org.springframework.web.multipart.MultipartFile; + +public interface ImageUploader { + String upload(MultipartFile imageFile); +} diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/challenge/ChallengeCommand.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/challenge/ChallengeCommand.java index 9f11ef1..b8b513d 100644 --- a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/challenge/ChallengeCommand.java +++ b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/challenge/ChallengeCommand.java @@ -24,6 +24,27 @@ public Verificate(String content, MultipartFile image) { this.image = image; this.validateSelf(); } + + public VerificationCreate afterUpload(String imageUrl) { + return VerificationCreate.builder() + .content(content) + .imageUrl(imageUrl) + .build(); + } + } + + @Getter + @Builder + public static class VerificationCreate extends SelfValidating { + @NotBlank(message = "내용은 필수입니다.") + private final String content; + private final String imageUrl; + + public VerificationCreate(String content, String imageUrl) { + this.content = content; + this.imageUrl = imageUrl; + this.validateSelf(); + } } @Getter diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/challengeverification/ChallengeVerification.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/challengeverification/ChallengeVerification.java index 5cbf540..697711a 100644 --- a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/challengeverification/ChallengeVerification.java +++ b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/challengeverification/ChallengeVerification.java @@ -1,21 +1,9 @@ package org.haedal.zzansuni.domain.challengegroup.challengeverification; -import jakarta.persistence.Entity; -import jakarta.persistence.EnumType; -import jakarta.persistence.Enumerated; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.NoArgsConstructor; +import jakarta.persistence.*; +import lombok.*; import org.haedal.zzansuni.domain.BaseTimeEntity; -import org.haedal.zzansuni.domain.challengegroup.challenge.ChallengeCommand.Verificate; +import org.haedal.zzansuni.domain.challengegroup.challenge.ChallengeCommand; import org.haedal.zzansuni.domain.challengegroup.challenge.ChallengeVerificationStatus; import org.haedal.zzansuni.domain.challengegroup.userchallenge.UserChallenge; @@ -41,11 +29,10 @@ public class ChallengeVerification extends BaseTimeEntity { @Enumerated(EnumType.STRING) private ChallengeVerificationStatus status; - public static ChallengeVerification create(Verificate command, - UserChallenge userChallenge) { + public static ChallengeVerification create(ChallengeCommand.VerificationCreate command, UserChallenge userChallenge) { return ChallengeVerification.builder() .userChallenge(userChallenge) - .imageUrl(null) + .imageUrl(command.getImageUrl()) .content(command.getContent()) .status(ChallengeVerificationStatus.APPROVED) .build(); diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/challengeverification/ChallengeVerificationStore.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/challengeverification/ChallengeVerificationStore.java deleted file mode 100644 index fc5e127..0000000 --- a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/challengeverification/ChallengeVerificationStore.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.haedal.zzansuni.domain.challengegroup.challengeverification; - -public interface ChallengeVerificationStore { - - ChallengeVerification store(ChallengeVerification challengeVerification); - -} diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/userchallenge/UserChallenge.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/userchallenge/UserChallenge.java index 8e953e8..633a5c9 100644 --- a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/userchallenge/UserChallenge.java +++ b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/userchallenge/UserChallenge.java @@ -1,14 +1,6 @@ package org.haedal.zzansuni.domain.challengegroup.userchallenge; -import jakarta.persistence.Entity; -import jakarta.persistence.EnumType; -import jakarta.persistence.Enumerated; -import jakarta.persistence.FetchType; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import jakarta.persistence.JoinColumn; -import jakarta.persistence.ManyToOne; +import jakarta.persistence.*; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Builder; @@ -16,9 +8,14 @@ import lombok.NoArgsConstructor; import org.haedal.zzansuni.domain.BaseTimeEntity; import org.haedal.zzansuni.domain.challengegroup.challenge.Challenge; +import org.haedal.zzansuni.domain.challengegroup.challenge.ChallengeCommand; import org.haedal.zzansuni.domain.challengegroup.challenge.ChallengeStatus; +import org.haedal.zzansuni.domain.challengegroup.challengeverification.ChallengeVerification; import org.haedal.zzansuni.domain.user.User; +import java.util.ArrayList; +import java.util.List; + @Entity @AllArgsConstructor @NoArgsConstructor(access = AccessLevel.PROTECTED) @@ -41,26 +38,31 @@ public class UserChallenge extends BaseTimeEntity { @Enumerated(EnumType.STRING) private ChallengeStatus status; + @OneToMany(mappedBy = "userChallenge", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true) + private List challengeVerifications = new ArrayList<>(); + public static UserChallenge create(Challenge challenge, User user) { return UserChallenge.builder() - .challenge(challenge) - .user(user) - .status(ChallengeStatus.PROCEEDING) - .build(); + .challenge(challenge) + .user(user) + .status(ChallengeStatus.PROCEEDING) + .build(); } - private void complete() { - this.status = ChallengeStatus.SUCCESS; - } + public void addChallengeVerification(ChallengeCommand.VerificationCreate command) { + ChallengeVerification challengeVerification = ChallengeVerification.create(command, this); + this.challengeVerifications.add(challengeVerification); - /** - * 챌린지 인증 참여횟수와 필요참여획수가 같으면 챌린지 완료로 변경 - */ - public void tryComplete(Integer currentCount, Integer requiredCount) { - if (currentCount.equals(requiredCount)) { + // 만약 챌린지 인증 참여횟수와 필요참여획수가 같으면 챌린지 완료로 변경 + if(this.challengeVerifications.size() == this.challenge.getRequiredCount()) { complete(); } } + private void complete() { + this.status = ChallengeStatus.SUCCESS; + } + + } diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/userchallenge/UserChallengeReader.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/userchallenge/UserChallengeReader.java index 03d93f1..a626968 100644 --- a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/userchallenge/UserChallengeReader.java +++ b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/userchallenge/UserChallengeReader.java @@ -5,6 +5,7 @@ public interface UserChallengeReader { UserChallenge getById(Long id); + UserChallenge getByIdWithVerificationAndChallenge(Long id); Optional findById(Long id); diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/userchallenge/UserChallengeService.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/userchallenge/UserChallengeService.java index e0ed08e..c28bc45 100644 --- a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/userchallenge/UserChallengeService.java +++ b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/userchallenge/UserChallengeService.java @@ -3,12 +3,9 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.haedal.zzansuni.domain.challengegroup.challenge.Challenge; -import org.haedal.zzansuni.domain.challengegroup.challenge.ChallengeCommand.Verificate; +import org.haedal.zzansuni.domain.challengegroup.challenge.ChallengeCommand; import org.haedal.zzansuni.domain.challengegroup.challenge.ChallengeModel; import org.haedal.zzansuni.domain.challengegroup.challenge.ChallengeReader; -import org.haedal.zzansuni.domain.challengegroup.challengeverification.ChallengeVerification; -import org.haedal.zzansuni.domain.challengegroup.challengeverification.ChallengeVerificationReader; -import org.haedal.zzansuni.domain.challengegroup.challengeverification.ChallengeVerificationStore; import org.haedal.zzansuni.domain.user.User; import org.haedal.zzansuni.domain.user.UserReader; import org.springframework.stereotype.Service; @@ -24,9 +21,6 @@ public class UserChallengeService { private final UserReader userReader; private final ChallengeReader challengeReader; - private final ChallengeVerificationStore challengeVerificationStore; - private final ChallengeVerificationReader challengeVerificationReader; - /** * 챌린지 참여하기 1. 유저와 챌린지 정보를 받아서 UserChallenge 테이블에 데이터 추가 */ @@ -54,26 +48,19 @@ public void participateChallenge(Long userId, Long challengeId) { * UserChallenge 엔티티에서 참여횟수 가져오기
4. 참여횟수와 필요참여횟수가 같으면 챌린지 완료로 변경 */ @Transactional - public ChallengeModel.ChallengeVerificationResult verification(Long userChallengeId, - Verificate verificate) { - UserChallenge userChallenge = userChallengeReader.getById(userChallengeId); - // TODO 이미지 업로드 로직 필요 - ChallengeVerification challengeVerification = ChallengeVerification.create(verificate, - userChallenge); - challengeVerificationStore.store(challengeVerification); + public ChallengeModel.ChallengeVerificationResult verification( + Long userChallengeId, + ChallengeCommand.VerificationCreate command + ) { + UserChallenge userChallenge = userChallengeReader.getByIdWithVerificationAndChallenge(userChallengeId); + userChallenge.addChallengeVerification(command); - // 챌린지 RequiredCount 가져오기 위해 챌린지 정보 가져온다 + // 챌린지 RequiredCount 가져오기 위해 챌린지 정보 가져온다 Challenge challenge = userChallenge.getChallenge(); - //사용자가 챌린지를 몇번 수행했는지 가져온다 - Integer currentCount = challengeVerificationReader.countByUserChallengeId(userChallengeId); - log.info("currentCount: {}", currentCount); - - //참여횟수와 필요참여횟수가 같으면 챌린지 완료로 변경 - userChallenge.tryComplete(currentCount, challenge.getRequiredCount()); return ChallengeModel.ChallengeVerificationResult - .of(challenge.getRequiredCount(), currentCount, challenge.getOnceExp()); + .of(challenge.getRequiredCount(), userChallenge.getChallengeVerifications().size(), challenge.getOnceExp()); } } diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/infrastructure/FakeUploader.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/infrastructure/FakeUploader.java new file mode 100644 index 0000000..257c0ee --- /dev/null +++ b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/infrastructure/FakeUploader.java @@ -0,0 +1,15 @@ +package org.haedal.zzansuni.infrastructure; + +import lombok.RequiredArgsConstructor; +import org.haedal.zzansuni.domain.ImageUploader; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +@Component +@RequiredArgsConstructor +public class FakeUploader implements ImageUploader { + @Override + public String upload(MultipartFile imageFile) { + return "https://loremflickr.com/640/480?lock=3881982306025472"; + } +} diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/infrastructure/challengegroup/challengeverification/ChallengeVerificationStoreImpl.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/infrastructure/challengegroup/challengeverification/ChallengeVerificationStoreImpl.java deleted file mode 100644 index 79ec8cc..0000000 --- a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/infrastructure/challengegroup/challengeverification/ChallengeVerificationStoreImpl.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.haedal.zzansuni.infrastructure.challengegroup.challengeverification; - -import lombok.RequiredArgsConstructor; -import org.haedal.zzansuni.domain.challengegroup.challengeverification.ChallengeVerification; -import org.haedal.zzansuni.domain.challengegroup.challengeverification.ChallengeVerificationStore; -import org.springframework.stereotype.Component; - -@Component -@RequiredArgsConstructor -public class ChallengeVerificationStoreImpl implements ChallengeVerificationStore { - - private final ChallengeVerificationRepository challengeVerificationRepository; - - @Override - public ChallengeVerification store(ChallengeVerification challengeVerification) { - return challengeVerificationRepository.save(challengeVerification); - } -} diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/infrastructure/challengegroup/userchallenge/UserChallengeReaderImpl.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/infrastructure/challengegroup/userchallenge/UserChallengeReaderImpl.java index af6734c..b48c532 100644 --- a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/infrastructure/challengegroup/userchallenge/UserChallengeReaderImpl.java +++ b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/infrastructure/challengegroup/userchallenge/UserChallengeReaderImpl.java @@ -2,6 +2,7 @@ import java.util.NoSuchElementException; import java.util.Optional; + import lombok.RequiredArgsConstructor; import org.haedal.zzansuni.domain.challengegroup.userchallenge.UserChallenge; import org.haedal.zzansuni.domain.challengegroup.userchallenge.UserChallengeReader; @@ -18,6 +19,13 @@ public UserChallenge getById(Long id) { return findById(id).orElseThrow(NoSuchElementException::new); } + @Override + public UserChallenge getByIdWithVerificationAndChallenge(Long id) { + return userChallengeRepository + .findByIdWithFetchLazy(id) + .orElseThrow(NoSuchElementException::new); + } + @Override public Optional findById(Long id) { return userChallengeRepository.findById(id); @@ -25,8 +33,8 @@ public Optional findById(Long id) { @Override public UserChallenge getByUserIdAndChallengeId(Long userId, Long challengeId) { - return findByUserIdAndChallengeId(userId, challengeId).orElseThrow( - NoSuchElementException::new); + return findByUserIdAndChallengeId(userId, challengeId) + .orElseThrow(NoSuchElementException::new); } @Override diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/infrastructure/challengegroup/userchallenge/UserChallengeRepository.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/infrastructure/challengegroup/userchallenge/UserChallengeRepository.java index e796415..777c9da 100644 --- a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/infrastructure/challengegroup/userchallenge/UserChallengeRepository.java +++ b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/infrastructure/challengegroup/userchallenge/UserChallengeRepository.java @@ -3,9 +3,20 @@ import java.util.Optional; import org.haedal.zzansuni.domain.challengegroup.userchallenge.UserChallenge; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; public interface UserChallengeRepository extends JpaRepository { Optional findByUserIdAndChallengeId(Long userId, Long challengeId); + /** + * [challengeVerifications]와 [challenge]를 [fetchJoin]으로 OneToMany를 가져온다. + */ + @Query("SELECT uc FROM UserChallenge uc " + + "LEFT JOIN FETCH uc.challengeVerifications " + + "LEFT JOIN FETCH uc.challenge " + + "WHERE uc.id = :id") + Optional findByIdWithFetchLazy(@Param("id") Long id); + } From 5b240cae898c0c419fc055ac8da338755ddde9f7 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: Sat, 1 Jun 2024 15:27:33 +0900 Subject: [PATCH 2/3] =?UTF-8?q?[Refactor]:=20=EC=B1=8C=EB=A6=B0=EC=A7=80?= =?UTF-8?q?=20=EA=B7=B8=EB=A3=B9=20-=20=EC=B1=8C=EB=A6=B0=EC=A7=80=20OneTo?= =?UTF-8?q?Many=EB=A1=9C=20=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 --- .../domain/challengegroup/ChallengeGroup.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/ChallengeGroup.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/ChallengeGroup.java index 894dad0..103b6ed 100644 --- a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/ChallengeGroup.java +++ b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/domain/challengegroup/ChallengeGroup.java @@ -1,17 +1,16 @@ package org.haedal.zzansuni.domain.challengegroup; -import jakarta.persistence.Entity; -import jakarta.persistence.EnumType; -import jakarta.persistence.Enumerated; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; +import jakarta.persistence.*; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import org.haedal.zzansuni.domain.BaseTimeEntity; +import org.haedal.zzansuni.domain.challengegroup.challenge.Challenge; + +import java.util.ArrayList; +import java.util.List; @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) @@ -31,6 +30,10 @@ public class ChallengeGroup extends BaseTimeEntity { private String content; + private String guide; + private Integer cumulativeCount; + @OneToMany(mappedBy = "challengeGroup", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true) + private List challenges = new ArrayList<>(); } From e9f3fb053833f9eac86be9e467a73bcff3b4cf43 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: Sat, 1 Jun 2024 15:28:18 +0900 Subject: [PATCH 3/3] [Fix]: bug fix --- .../challenge/ChallengeRepository.java | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/infrastructure/challengegroup/challenge/ChallengeRepository.java b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/infrastructure/challengegroup/challenge/ChallengeRepository.java index f42df5c..9270dd8 100644 --- a/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/infrastructure/challengegroup/challenge/ChallengeRepository.java +++ b/zzansuni-api-server/app/src/main/java/org/haedal/zzansuni/infrastructure/challengegroup/challenge/ChallengeRepository.java @@ -11,24 +11,5 @@ public interface ChallengeRepository extends JpaRepository { - @Query( - "SELECT new org.haedal.zzansuni.domain.challengegroup.challenge.ChallengeCurrentDto(" - + - "c.id, cg.title, " + - "(SELECT COUNT(cv) FROM ChallengeVerification cv WHERE cv.userChallenge.challenge.id = c.id AND cv.userChallenge.user.id = :userId), " - + - "c.requiredCount, " + - "uc.createdAt, c.startDate, c.endDate, " + - "cg.category, " + - "(SELECT COUNT(cr) > 0 FROM ChallengeReview cr WHERE cr.userChallenge.challenge.id = c.id AND cr.userChallenge.user.id = :userId)" - + - ") " + - "FROM Challenge c " + - "JOIN c.challengeGroup cg " + - "JOIN UserChallenge uc ON uc.challenge.id = c.id " + - "WHERE uc.user.id = :userId " + - "AND uc.status = org.haedal.zzansuni.domain.challengegroup.challenge.ChallengeStatus.PROCEEDING ") - Page findAllCurrentChallenges(@Param("userId") Long userId, - Pageable pageable); }