From 7cdf34a3a154f7ac542c74b0b4f216ff2e5d0382 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=84=B8=EC=A4=80?= <74056843+sejoon00@users.noreply.github.com> Date: Mon, 3 Mar 2025 17:19:14 +0900 Subject: [PATCH 1/3] =?UTF-8?q?[fix]=20=EB=AC=B8=ED=95=AD=20=EC=83=88?= =?UTF-8?q?=EB=81=BC=EB=AC=B8=ED=95=AD=20=EC=B2=98=EB=B0=A9=20=EC=9D=B4?= =?UTF-8?q?=EB=AF=B8=EC=A7=80=20=EB=B3=84=EB=8F=84=20=EC=9E=85=EB=A0=A5?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD=20=EB=B0=98=EC=98=81:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/childProblem/QChildProblem.java | 2 ++ .../mapper/ChildProblemMapperImpl.java | 28 +++++-------------- .../service/mapper/ProblemMapperImpl.java | 2 +- .../problem/controller/ProblemController.java | 2 +- .../domain/childProblem/ChildProblem.java | 12 +++++++- .../problem/domain/problem/Problem.java | 4 +++ .../dto/request/ChildProblemPostRequest.java | 1 + .../request/ChildProblemUpdateRequest.java | 5 +++- .../dto/response/ChildProblemGetResponse.java | 6 +++- .../dto/response/ProblemGetResponse.java | 2 +- .../problem/service/ChildProblemService.java | 2 -- .../problem/service/ProblemUpdateService.java | 14 +++++++--- .../service/mapper/ChildProblemMapper.java | 4 +-- .../service/ProblemUpdateServiceTest.java | 9 ++++-- 14 files changed, 55 insertions(+), 38 deletions(-) diff --git a/src/main/generated/com/moplus/moplus_server/domain/problem/domain/childProblem/QChildProblem.java b/src/main/generated/com/moplus/moplus_server/domain/problem/domain/childProblem/QChildProblem.java index 193076d..94253bb 100644 --- a/src/main/generated/com/moplus/moplus_server/domain/problem/domain/childProblem/QChildProblem.java +++ b/src/main/generated/com/moplus/moplus_server/domain/problem/domain/childProblem/QChildProblem.java @@ -37,6 +37,8 @@ public class QChildProblem extends EntityPathBase { public final StringPath imageUrl = createString("imageUrl"); + public final ListPath prescriptionImageUrls = this.createList("prescriptionImageUrls", String.class, StringPath.class, PathInits.DIRECT2); + //inherited public final DateTimePath updatedDate = _super.updatedDate; diff --git a/src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ChildProblemMapperImpl.java b/src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ChildProblemMapperImpl.java index e682008..d2fdf57 100644 --- a/src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ChildProblemMapperImpl.java +++ b/src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ChildProblemMapperImpl.java @@ -1,40 +1,22 @@ package com.moplus.moplus_server.domain.problem.service.mapper; import com.moplus.moplus_server.domain.problem.domain.childProblem.ChildProblem; -import com.moplus.moplus_server.domain.problem.dto.request.ChildProblemPostRequest; import com.moplus.moplus_server.domain.problem.dto.request.ChildProblemUpdateRequest; +import java.util.ArrayList; import java.util.LinkedHashSet; +import java.util.List; import java.util.Set; import javax.annotation.processing.Generated; import org.springframework.stereotype.Component; @Generated( value = "org.mapstruct.ap.MappingProcessor", - date = "2025-02-21T03:13:14+0900", + date = "2025-03-03T16:56:15+0900", comments = "version: 1.6.3, compiler: javac, environment: Java 17.0.10 (JetBrains s.r.o.)" ) @Component public class ChildProblemMapperImpl implements ChildProblemMapper { - @Override - public ChildProblem from(ChildProblemPostRequest request) { - if ( request == null ) { - return null; - } - - ChildProblem.ChildProblemBuilder childProblem = ChildProblem.builder(); - - childProblem.imageUrl( request.imageUrl() ); - childProblem.answerType( request.answerType() ); - childProblem.answer( request.answer() ); - Set set = request.conceptTagIds(); - if ( set != null ) { - childProblem.conceptTagIds( new LinkedHashSet( set ) ); - } - - return childProblem.build(); - } - @Override public ChildProblem from(ChildProblemUpdateRequest request) { if ( request == null ) { @@ -44,6 +26,10 @@ public ChildProblem from(ChildProblemUpdateRequest request) { ChildProblem.ChildProblemBuilder childProblem = ChildProblem.builder(); childProblem.id( request.childProblemId() ); + List list = request.prescriptionImageUrls(); + if ( list != null ) { + childProblem.prescriptionImageUrls( new ArrayList( list ) ); + } childProblem.imageUrl( request.imageUrl() ); childProblem.answerType( request.answerType() ); childProblem.answer( request.answer() ); diff --git a/src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ProblemMapperImpl.java b/src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ProblemMapperImpl.java index c228ba7..06ac813 100644 --- a/src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ProblemMapperImpl.java +++ b/src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ProblemMapperImpl.java @@ -15,7 +15,7 @@ @Generated( value = "org.mapstruct.ap.MappingProcessor", - date = "2025-02-24T23:05:21+0900", + date = "2025-03-03T16:34:56+0900", comments = "version: 1.6.3, compiler: javac, environment: Java 17.0.10 (JetBrains s.r.o.)" ) @Component diff --git a/src/main/java/com/moplus/moplus_server/domain/problem/controller/ProblemController.java b/src/main/java/com/moplus/moplus_server/domain/problem/controller/ProblemController.java index 9db45a7..bf72756 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problem/controller/ProblemController.java +++ b/src/main/java/com/moplus/moplus_server/domain/problem/controller/ProblemController.java @@ -63,7 +63,7 @@ public ResponseEntity updateProblem( @DeleteMapping("/{id}") @Operation(summary = "문항 삭제") - public ResponseEntity updateProblem( + public ResponseEntity deleteProblem( @PathVariable("id") Long id ) { problemDeleteService.deleteProblem(id); diff --git a/src/main/java/com/moplus/moplus_server/domain/problem/domain/childProblem/ChildProblem.java b/src/main/java/com/moplus/moplus_server/domain/problem/domain/childProblem/ChildProblem.java index 08c83c5..52bda4f 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problem/domain/childProblem/ChildProblem.java +++ b/src/main/java/com/moplus/moplus_server/domain/problem/domain/childProblem/ChildProblem.java @@ -2,11 +2,13 @@ import com.moplus.moplus_server.domain.problem.domain.Answer; import com.moplus.moplus_server.domain.problem.domain.problem.AnswerType; +import com.moplus.moplus_server.domain.problem.repository.converter.StringListConverter; import com.moplus.moplus_server.global.common.BaseEntity; import com.moplus.moplus_server.global.error.exception.ErrorCode; import com.moplus.moplus_server.global.error.exception.InvalidValueException; import jakarta.persistence.CollectionTable; import jakarta.persistence.Column; +import jakarta.persistence.Convert; import jakarta.persistence.ElementCollection; import jakarta.persistence.Embedded; import jakarta.persistence.Entity; @@ -16,6 +18,7 @@ import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.JoinColumn; +import java.util.List; import java.util.Set; import lombok.AccessLevel; import lombok.Builder; @@ -35,6 +38,9 @@ public class ChildProblem extends BaseEntity { @CollectionTable(name = "child_problem_concept", joinColumns = @JoinColumn(name = "child_problem_id")) @Column(name = "concept_tag_id") Set conceptTagIds; + @Convert(converter = StringListConverter.class) + @Column(columnDefinition = "TEXT") + List prescriptionImageUrls; private String imageUrl; @Embedded private Answer answer; @@ -42,13 +48,15 @@ public class ChildProblem extends BaseEntity { private AnswerType answerType; @Builder - public ChildProblem(Long id, String imageUrl, AnswerType answerType, String answer, Set conceptTagIds) { + public ChildProblem(Long id, String imageUrl, AnswerType answerType, String answer, Set conceptTagIds, + List prescriptionImageUrls) { this.id = id; validateAnswerByType(answer, answerType); this.imageUrl = imageUrl; this.answerType = answerType; this.answer = new Answer(answer, answerType); this.conceptTagIds = conceptTagIds; + this.prescriptionImageUrls = prescriptionImageUrls; } public static ChildProblem createEmptyChildProblem() { @@ -57,6 +65,7 @@ public static ChildProblem createEmptyChildProblem() { .answerType(AnswerType.SHORT_ANSWER) .answer("") .conceptTagIds(Set.of()) + .prescriptionImageUrls(List.of()) .build(); } @@ -76,6 +85,7 @@ public void update(ChildProblem input) { this.answerType = input.answerType; this.answer = input.answer; this.conceptTagIds = input.conceptTagIds; + this.prescriptionImageUrls = input.prescriptionImageUrls; } public String getAnswer() { diff --git a/src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/Problem.java b/src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/Problem.java index b39cf66..5185f43 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/Problem.java +++ b/src/main/java/com/moplus/moplus_server/domain/problem/domain/problem/Problem.java @@ -194,4 +194,8 @@ public String getProblemCustomId() { return problemCustomId.getId(); } + public Integer getNumber() { + return number != null ? number : null; + } + } \ No newline at end of file diff --git a/src/main/java/com/moplus/moplus_server/domain/problem/dto/request/ChildProblemPostRequest.java b/src/main/java/com/moplus/moplus_server/domain/problem/dto/request/ChildProblemPostRequest.java index 0877351..7df4684 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problem/dto/request/ChildProblemPostRequest.java +++ b/src/main/java/com/moplus/moplus_server/domain/problem/dto/request/ChildProblemPostRequest.java @@ -10,6 +10,7 @@ public record ChildProblemPostRequest( String answer, @NotNull(message = "컬렉션 값은 필수입니다.") Set conceptTagIds, + int sequence ) { } diff --git a/src/main/java/com/moplus/moplus_server/domain/problem/dto/request/ChildProblemUpdateRequest.java b/src/main/java/com/moplus/moplus_server/domain/problem/dto/request/ChildProblemUpdateRequest.java index ec78dd1..7ae28f0 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problem/dto/request/ChildProblemUpdateRequest.java +++ b/src/main/java/com/moplus/moplus_server/domain/problem/dto/request/ChildProblemUpdateRequest.java @@ -2,6 +2,7 @@ import com.moplus.moplus_server.domain.problem.domain.problem.AnswerType; import jakarta.validation.constraints.NotNull; +import java.util.List; import java.util.Set; public record ChildProblemUpdateRequest( @@ -10,6 +11,8 @@ public record ChildProblemUpdateRequest( AnswerType answerType, String answer, @NotNull(message = "컬렉션 값은 필수입니다.") - Set conceptTagIds + Set conceptTagIds, + @NotNull(message = "컬렉션 값은 필수입니다.") + List prescriptionImageUrls ) { } diff --git a/src/main/java/com/moplus/moplus_server/domain/problem/dto/response/ChildProblemGetResponse.java b/src/main/java/com/moplus/moplus_server/domain/problem/dto/response/ChildProblemGetResponse.java index b5fc52e..c2ad8f4 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problem/dto/response/ChildProblemGetResponse.java +++ b/src/main/java/com/moplus/moplus_server/domain/problem/dto/response/ChildProblemGetResponse.java @@ -3,6 +3,7 @@ import com.moplus.moplus_server.domain.problem.domain.childProblem.ChildProblem; import com.moplus.moplus_server.domain.problem.domain.problem.AnswerType; import jakarta.validation.constraints.NotNull; +import java.util.List; import java.util.Set; import lombok.Builder; @@ -14,7 +15,9 @@ public record ChildProblemGetResponse( AnswerType answerType, String answer, @NotNull(message = "컬렉션 값은 필수입니다.") - Set conceptTagIds + Set conceptTagIds, + @NotNull(message = "컬렉션 값은 필수입니다.") + List prescriptionImageUrls ) { public static ChildProblemGetResponse of(ChildProblem childProblem) { @@ -24,6 +27,7 @@ public static ChildProblemGetResponse of(ChildProblem childProblem) { .answerType(childProblem.getAnswerType()) .answer(childProblem.getAnswer()) .conceptTagIds(childProblem.getConceptTagIds()) + .prescriptionImageUrls(childProblem.getPrescriptionImageUrls()) .build(); } } diff --git a/src/main/java/com/moplus/moplus_server/domain/problem/dto/response/ProblemGetResponse.java b/src/main/java/com/moplus/moplus_server/domain/problem/dto/response/ProblemGetResponse.java index 06bb301..805d018 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problem/dto/response/ProblemGetResponse.java +++ b/src/main/java/com/moplus/moplus_server/domain/problem/dto/response/ProblemGetResponse.java @@ -18,7 +18,7 @@ public record ProblemGetResponse( Set conceptTagIds, boolean isConfirmed, Long practiceTestId, - int number, + Integer number, Integer difficulty, String title, String answer, diff --git a/src/main/java/com/moplus/moplus_server/domain/problem/service/ChildProblemService.java b/src/main/java/com/moplus/moplus_server/domain/problem/service/ChildProblemService.java index bdc1f6a..7cf4753 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problem/service/ChildProblemService.java +++ b/src/main/java/com/moplus/moplus_server/domain/problem/service/ChildProblemService.java @@ -2,7 +2,6 @@ import com.moplus.moplus_server.domain.problem.domain.childProblem.ChildProblem; import com.moplus.moplus_server.domain.problem.domain.problem.Problem; -import com.moplus.moplus_server.domain.problem.repository.ChildProblemRepository; import com.moplus.moplus_server.domain.problem.repository.ProblemRepository; import com.moplus.moplus_server.global.error.exception.ErrorCode; import com.moplus.moplus_server.global.error.exception.InvalidValueException; @@ -15,7 +14,6 @@ public class ChildProblemService { private final ProblemRepository problemRepository; - private final ChildProblemRepository childProblemRepository; @Transactional public Long createChildProblem(Long problemId) { diff --git a/src/main/java/com/moplus/moplus_server/domain/problem/service/ProblemUpdateService.java b/src/main/java/com/moplus/moplus_server/domain/problem/service/ProblemUpdateService.java index 423fd3b..9fb950b 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problem/service/ProblemUpdateService.java +++ b/src/main/java/com/moplus/moplus_server/domain/problem/service/ProblemUpdateService.java @@ -6,6 +6,7 @@ import com.moplus.moplus_server.domain.problem.domain.problem.Problem; import com.moplus.moplus_server.domain.problem.domain.problem.ProblemAdminIdService; import com.moplus.moplus_server.domain.problem.domain.problem.ProblemCustomId; +import com.moplus.moplus_server.domain.problem.domain.problem.ProblemType; import com.moplus.moplus_server.domain.problem.dto.request.ProblemUpdateRequest; import com.moplus.moplus_server.domain.problem.dto.response.ProblemGetResponse; import com.moplus.moplus_server.domain.problem.repository.PracticeTestTagRepository; @@ -30,12 +31,17 @@ public class ProblemUpdateService { @Transactional public ProblemGetResponse updateProblem(Long problemId, ProblemUpdateRequest request) { - PracticeTestTag practiceTestTag = practiceTestRepository.findByIdElseThrow(request.practiceTestId()); conceptTagRepository.existsByIdElseThrow(request.conceptTagIds()); Problem problem = problemRepository.findByIdElseThrow(problemId); - - ProblemCustomId problemCustomId = problemAdminIdService.nextId(request.number(), practiceTestTag, - request.problemType()); + PracticeTestTag practiceTestTag = null; + ProblemCustomId problemCustomId = null; + if (request.problemType() != ProblemType.CREATION_PROBLEM) { + practiceTestTag = practiceTestRepository.findByIdElseThrow(request.practiceTestId()); + problemCustomId = problemAdminIdService.nextId(request.number(), practiceTestTag, + request.problemType()); + } else { + problemCustomId = problemAdminIdService.nextId(request.problemType()); + } Problem inputProblem = problemMapper.from(request, problemCustomId, practiceTestTag); problem.update(inputProblem); diff --git a/src/main/java/com/moplus/moplus_server/domain/problem/service/mapper/ChildProblemMapper.java b/src/main/java/com/moplus/moplus_server/domain/problem/service/mapper/ChildProblemMapper.java index b48abe5..836f761 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problem/service/mapper/ChildProblemMapper.java +++ b/src/main/java/com/moplus/moplus_server/domain/problem/service/mapper/ChildProblemMapper.java @@ -1,7 +1,6 @@ package com.moplus.moplus_server.domain.problem.service.mapper; import com.moplus.moplus_server.domain.problem.domain.childProblem.ChildProblem; -import com.moplus.moplus_server.domain.problem.dto.request.ChildProblemPostRequest; import com.moplus.moplus_server.domain.problem.dto.request.ChildProblemUpdateRequest; import org.mapstruct.Mapper; import org.mapstruct.Mapping; @@ -9,8 +8,7 @@ @Mapper(componentModel = "spring") public interface ChildProblemMapper { - ChildProblem from(ChildProblemPostRequest request); - @Mapping(target = "id", source = "childProblemId") + @Mapping(target = "prescriptionImageUrls", source = "prescriptionImageUrls") ChildProblem from(ChildProblemUpdateRequest request); } diff --git a/src/test/java/com/moplus/moplus_server/domain/problem/service/ProblemUpdateServiceTest.java b/src/test/java/com/moplus/moplus_server/domain/problem/service/ProblemUpdateServiceTest.java index 6a2fa18..e27e494 100644 --- a/src/test/java/com/moplus/moplus_server/domain/problem/service/ProblemUpdateServiceTest.java +++ b/src/test/java/com/moplus/moplus_server/domain/problem/service/ProblemUpdateServiceTest.java @@ -49,7 +49,8 @@ void setUp() { "updatedChild1.png", AnswerType.MULTIPLE_CHOICE, "2", - Set.of(2L, 3L) + Set.of(2L, 3L), + List.of("prescription1.png", "prescription2.png") ); ChildProblemUpdateRequest updateChildProblem2 = new ChildProblemUpdateRequest( @@ -57,7 +58,8 @@ void setUp() { "updatedChild2.png", AnswerType.SHORT_ANSWER, "23", - Set.of(3L, 4L) + Set.of(3L, 4L), + List.of("prescription3.png") ); problemUpdateRequest = new ProblemUpdateRequest( @@ -128,6 +130,8 @@ class 문제_업데이트_정상_동작 { assertThat(updatedChild.getAnswerType()).isEqualTo(AnswerType.MULTIPLE_CHOICE); assertThat(updatedChild.getAnswer()).isEqualTo("2"); assertThat(updatedChild.getConceptTagIds()).containsExactlyInAnyOrderElementsOf(Set.of(2L, 3L)); + assertThat(updatedChild.getPrescriptionImageUrls()) + .containsExactly("prescription1.png", "prescription2.png"); // 두 번째 자식 문제 검증 (새로 추가된 문제) ChildProblem newChild = childProblems.get(1); @@ -135,6 +139,7 @@ class 문제_업데이트_정상_동작 { assertThat(newChild.getAnswerType()).isEqualTo(AnswerType.SHORT_ANSWER); assertThat(newChild.getAnswer()).isEqualTo("23"); assertThat(newChild.getConceptTagIds()).containsExactlyInAnyOrderElementsOf(Set.of(3L, 4L)); + assertThat(newChild.getPrescriptionImageUrls()).containsExactly("prescription3.png"); // 추가된 검증 assertThat(response.recommendedMinute()).isEqualTo(30); From c395cfbe3a9fba7f1f273e70e35c6a53029cfccc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=84=B8=EC=A4=80?= <74056843+sejoon00@users.noreply.github.com> Date: Mon, 3 Mar 2025 17:30:17 +0900 Subject: [PATCH 2/3] =?UTF-8?q?[fix]=20=EB=AC=B8=ED=95=AD=20=EC=84=B8?= =?UTF-8?q?=ED=8A=B8=20=EC=A1=B0=ED=9A=8C=EC=97=90=20=EB=AC=B8=ED=95=AD=20?= =?UTF-8?q?=EB=82=B4=20=EC=83=88=EB=81=BC=EB=AC=B8=ED=95=AD=EC=9D=98=20?= =?UTF-8?q?=EA=B0=9C=EB=85=90=ED=83=9C=EA=B7=B8=EA=B9=8C=EC=A7=80=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=ED=95=B4=EC=84=9C=20=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/mapper/ChildProblemMapperImpl.java | 2 +- .../problem/service/mapper/ProblemMapperImpl.java | 2 +- .../problemset/service/ProblemSetGetService.java | 13 ++++++++----- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ChildProblemMapperImpl.java b/src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ChildProblemMapperImpl.java index d2fdf57..f872cbc 100644 --- a/src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ChildProblemMapperImpl.java +++ b/src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ChildProblemMapperImpl.java @@ -11,7 +11,7 @@ @Generated( value = "org.mapstruct.ap.MappingProcessor", - date = "2025-03-03T16:56:15+0900", + date = "2025-03-03T17:28:35+0900", comments = "version: 1.6.3, compiler: javac, environment: Java 17.0.10 (JetBrains s.r.o.)" ) @Component diff --git a/src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ProblemMapperImpl.java b/src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ProblemMapperImpl.java index 06ac813..e2bc255 100644 --- a/src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ProblemMapperImpl.java +++ b/src/main/generated/com/moplus/moplus_server/domain/problem/service/mapper/ProblemMapperImpl.java @@ -15,7 +15,7 @@ @Generated( value = "org.mapstruct.ap.MappingProcessor", - date = "2025-03-03T16:34:56+0900", + date = "2025-03-03T17:28:35+0900", comments = "version: 1.6.3, compiler: javac, environment: Java 17.0.10 (JetBrains s.r.o.)" ) @Component diff --git a/src/main/java/com/moplus/moplus_server/domain/problemset/service/ProblemSetGetService.java b/src/main/java/com/moplus/moplus_server/domain/problemset/service/ProblemSetGetService.java index 441e9d8..b3f4774 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problemset/service/ProblemSetGetService.java +++ b/src/main/java/com/moplus/moplus_server/domain/problemset/service/ProblemSetGetService.java @@ -3,7 +3,6 @@ import com.moplus.moplus_server.domain.concept.domain.ConceptTag; import com.moplus.moplus_server.domain.concept.repository.ConceptTagRepository; import com.moplus.moplus_server.domain.problem.domain.problem.Problem; -import com.moplus.moplus_server.domain.problem.repository.PracticeTestTagRepository; import com.moplus.moplus_server.domain.problem.repository.ProblemRepository; import com.moplus.moplus_server.domain.problemset.domain.ProblemSet; import com.moplus.moplus_server.domain.problemset.dto.response.ProblemSetGetResponse; @@ -42,10 +41,14 @@ public ProblemSetGetResponse getProblemSet(Long problemSetId) { List problemSummaries = new ArrayList<>(); for (Long problemId : problemSet.getProblemIds()) { Problem problem = problemRepository.findByIdElseThrow(problemId); - List tagNames = conceptTagRepository.findAllByIdsElseThrow(problem.getConceptTagIds()) - .stream() - .map(ConceptTag::getName) - .toList(); + List tagNames = new ArrayList<>( + conceptTagRepository.findAllByIdsElseThrow(problem.getConceptTagIds()) + .stream() + .map(ConceptTag::getName) + .toList()); + problem.getChildProblems().stream() + .map(childProblem -> conceptTagRepository.findAllByIdsElseThrow(childProblem.getConceptTagIds())) + .forEach(conceptTags -> tagNames.addAll(conceptTags.stream().map(ConceptTag::getName).toList())); problemSummaries.add(ProblemSummaryResponse.of(problem, tagNames)); } return ProblemSetGetResponse.of(problemSet, publishedDates, problemSummaries); From 9d699dc79a2e9fddb7b123ee3bd4cfb51b89eceb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=84=B8=EC=A4=80?= <74056843+sejoon00@users.noreply.github.com> Date: Mon, 3 Mar 2025 17:32:28 +0900 Subject: [PATCH 3/3] =?UTF-8?q?[fix]=20=EB=AC=B8=ED=95=AD=20=EC=84=B8?= =?UTF-8?q?=ED=8A=B8=20=EC=A1=B0=ED=9A=8C=EC=97=90=20=EB=AC=B8=ED=95=AD=20?= =?UTF-8?q?=EB=82=B4=20=EC=83=88=EB=81=BC=EB=AC=B8=ED=95=AD=EC=9D=98=20?= =?UTF-8?q?=EA=B0=9C=EB=85=90=ED=83=9C=EA=B7=B8=EA=B9=8C=EC=A7=80=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=ED=95=B4=EC=84=9C=20=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../problemset/dto/response/ProblemSummaryResponse.java | 6 +++--- .../domain/problemset/service/ProblemSetGetService.java | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/moplus/moplus_server/domain/problemset/dto/response/ProblemSummaryResponse.java b/src/main/java/com/moplus/moplus_server/domain/problemset/dto/response/ProblemSummaryResponse.java index 427ec6c..c366b6a 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problemset/dto/response/ProblemSummaryResponse.java +++ b/src/main/java/com/moplus/moplus_server/domain/problemset/dto/response/ProblemSummaryResponse.java @@ -2,7 +2,7 @@ import com.moplus.moplus_server.domain.problem.domain.problem.Problem; import jakarta.validation.constraints.NotNull; -import java.util.List; +import java.util.Set; import lombok.Builder; @Builder @@ -15,9 +15,9 @@ public record ProblemSummaryResponse( String memo, String mainProblemImageUrl, @NotNull(message = "컬렉션 값은 필수입니다.") - List tagNames + Set tagNames ) { - public static ProblemSummaryResponse of(Problem problem, List tagNames) { + public static ProblemSummaryResponse of(Problem problem, Set tagNames) { return ProblemSummaryResponse.builder() .problemId(problem.getId()) diff --git a/src/main/java/com/moplus/moplus_server/domain/problemset/service/ProblemSetGetService.java b/src/main/java/com/moplus/moplus_server/domain/problemset/service/ProblemSetGetService.java index b3f4774..aea8091 100644 --- a/src/main/java/com/moplus/moplus_server/domain/problemset/service/ProblemSetGetService.java +++ b/src/main/java/com/moplus/moplus_server/domain/problemset/service/ProblemSetGetService.java @@ -14,7 +14,9 @@ import com.moplus.moplus_server.global.error.exception.ErrorCode; import java.time.LocalDate; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -41,7 +43,7 @@ public ProblemSetGetResponse getProblemSet(Long problemSetId) { List problemSummaries = new ArrayList<>(); for (Long problemId : problemSet.getProblemIds()) { Problem problem = problemRepository.findByIdElseThrow(problemId); - List tagNames = new ArrayList<>( + Set tagNames = new HashSet<>( conceptTagRepository.findAllByIdsElseThrow(problem.getConceptTagIds()) .stream() .map(ConceptTag::getName)