Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ public class QChildProblem extends EntityPathBase<ChildProblem> {

public final StringPath imageUrl = createString("imageUrl");

public final ListPath<String, StringPath> prescriptionImageUrls = this.<String, StringPath>createList("prescriptionImageUrls", String.class, StringPath.class, PathInits.DIRECT2);

//inherited
public final DateTimePath<java.time.LocalDateTime> updatedDate = _super.updatedDate;

Expand Down
Original file line number Diff line number Diff line change
@@ -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-03T17:28:35+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<Long> set = request.conceptTagIds();
if ( set != null ) {
childProblem.conceptTagIds( new LinkedHashSet<Long>( set ) );
}

return childProblem.build();
}

@Override
public ChildProblem from(ChildProblemUpdateRequest request) {
if ( request == null ) {
Expand All @@ -44,6 +26,10 @@ public ChildProblem from(ChildProblemUpdateRequest request) {
ChildProblem.ChildProblemBuilder childProblem = ChildProblem.builder();

childProblem.id( request.childProblemId() );
List<String> list = request.prescriptionImageUrls();
if ( list != null ) {
childProblem.prescriptionImageUrls( new ArrayList<String>( list ) );
}
childProblem.imageUrl( request.imageUrl() );
childProblem.answerType( request.answerType() );
childProblem.answer( request.answer() );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2025-02-24T23:05:21+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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ public ResponseEntity<ProblemGetResponse> updateProblem(

@DeleteMapping("/{id}")
@Operation(summary = "문항 삭제")
public ResponseEntity<Void> updateProblem(
public ResponseEntity<Void> deleteProblem(
@PathVariable("id") Long id
) {
problemDeleteService.deleteProblem(id);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -35,20 +38,25 @@ public class ChildProblem extends BaseEntity {
@CollectionTable(name = "child_problem_concept", joinColumns = @JoinColumn(name = "child_problem_id"))
@Column(name = "concept_tag_id")
Set<Long> conceptTagIds;
@Convert(converter = StringListConverter.class)
@Column(columnDefinition = "TEXT")
List<String> prescriptionImageUrls;
private String imageUrl;
@Embedded
private Answer answer;
@Enumerated(EnumType.STRING)
private AnswerType answerType;

@Builder
public ChildProblem(Long id, String imageUrl, AnswerType answerType, String answer, Set<Long> conceptTagIds) {
public ChildProblem(Long id, String imageUrl, AnswerType answerType, String answer, Set<Long> conceptTagIds,
List<String> 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() {
Expand All @@ -57,6 +65,7 @@ public static ChildProblem createEmptyChildProblem() {
.answerType(AnswerType.SHORT_ANSWER)
.answer("")
.conceptTagIds(Set.of())
.prescriptionImageUrls(List.of())
.build();
}

Expand All @@ -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() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -194,4 +194,8 @@ public String getProblemCustomId() {
return problemCustomId.getId();
}

public Integer getNumber() {
return number != null ? number : null;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ public record ChildProblemPostRequest(
String answer,
@NotNull(message = "컬렉션 값은 필수입니다.")
Set<Long> conceptTagIds,

int sequence
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -10,6 +11,8 @@ public record ChildProblemUpdateRequest(
AnswerType answerType,
String answer,
@NotNull(message = "컬렉션 값은 필수입니다.")
Set<Long> conceptTagIds
Set<Long> conceptTagIds,
@NotNull(message = "컬렉션 값은 필수입니다.")
List<String> prescriptionImageUrls
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -14,7 +15,9 @@ public record ChildProblemGetResponse(
AnswerType answerType,
String answer,
@NotNull(message = "컬렉션 값은 필수입니다.")
Set<Long> conceptTagIds
Set<Long> conceptTagIds,
@NotNull(message = "컬렉션 값은 필수입니다.")
List<String> prescriptionImageUrls
) {

public static ChildProblemGetResponse of(ChildProblem childProblem) {
Expand All @@ -24,6 +27,7 @@ public static ChildProblemGetResponse of(ChildProblem childProblem) {
.answerType(childProblem.getAnswerType())
.answer(childProblem.getAnswer())
.conceptTagIds(childProblem.getConceptTagIds())
.prescriptionImageUrls(childProblem.getPrescriptionImageUrls())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public record ProblemGetResponse(
Set<Long> conceptTagIds,
boolean isConfirmed,
Long practiceTestId,
int number,
Integer number,
Integer difficulty,
String title,
String answer,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -15,7 +14,6 @@
public class ChildProblemService {

private final ProblemRepository problemRepository;
private final ChildProblemRepository childProblemRepository;

@Transactional
public Long createChildProblem(Long problemId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
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;

@Mapper(componentModel = "spring")
public interface ChildProblemMapper {

ChildProblem from(ChildProblemPostRequest request);

@Mapping(target = "id", source = "childProblemId")
@Mapping(target = "prescriptionImageUrls", source = "prescriptionImageUrls")
ChildProblem from(ChildProblemUpdateRequest request);
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -15,9 +15,9 @@ public record ProblemSummaryResponse(
String memo,
String mainProblemImageUrl,
@NotNull(message = "컬렉션 값은 필수입니다.")
List<String> tagNames
Set<String> tagNames
) {
public static ProblemSummaryResponse of(Problem problem, List<String> tagNames) {
public static ProblemSummaryResponse of(Problem problem, Set<String> tagNames) {

return ProblemSummaryResponse.builder()
.problemId(problem.getId())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -15,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;
Expand All @@ -42,10 +43,14 @@ public ProblemSetGetResponse getProblemSet(Long problemSetId) {
List<ProblemSummaryResponse> problemSummaries = new ArrayList<>();
for (Long problemId : problemSet.getProblemIds()) {
Problem problem = problemRepository.findByIdElseThrow(problemId);
List<String> tagNames = conceptTagRepository.findAllByIdsElseThrow(problem.getConceptTagIds())
.stream()
.map(ConceptTag::getName)
.toList();
Set<String> tagNames = new HashSet<>(
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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,15 +49,17 @@ 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(
2L,
"updatedChild2.png",
AnswerType.SHORT_ANSWER,
"23",
Set.of(3L, 4L)
Set.of(3L, 4L),
List.of("prescription3.png")
);

problemUpdateRequest = new ProblemUpdateRequest(
Expand Down Expand Up @@ -128,13 +130,16 @@ 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);
assertThat(newChild.getImageUrl()).isEqualTo("updatedChild2.png");
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);
Expand Down