diff --git a/src/main/java/com/moplus/moplus_server/client/problem/service/ClientProblemsGetService.java b/src/main/java/com/moplus/moplus_server/client/problem/service/ClientProblemsGetService.java index bbcb063..bd04eec 100644 --- a/src/main/java/com/moplus/moplus_server/client/problem/service/ClientProblemsGetService.java +++ b/src/main/java/com/moplus/moplus_server/client/problem/service/ClientProblemsGetService.java @@ -29,6 +29,8 @@ import java.time.LocalDate; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -83,12 +85,24 @@ public List getAllProblem(Long memberId, int year, int mo Long publishId = publish.getId(); LocalDate date = publish.getPublishedDate(); - // 날짜별 사용자 제출 정보 조회 + // 문항세트의 전체 문제 목록 조회 + ProblemSet problemSet = problemSetRepository.findByIdElseThrow(publish.getProblemSetId()); + List problemIds = problemSet.getProblemIds(); + + // 사용자 제출 정보 조회 List submissions = problemSubmitRepository.findByMemberIdAndPublishId(memberId, publishId); - List problemStatuses = submissions.stream() - .map(ProblemSubmit::getStatus) + Map submitStatusMap = submissions.stream() + .collect(Collectors.toMap( + ProblemSubmit::getProblemId, + ProblemSubmit::getStatus + )); + + // 모든 문항에 대해 상태 리스트 구성 + List problemStatuses = problemIds.stream() + .map(id -> submitStatusMap.getOrDefault(id, ProblemSubmitStatus.NOT_STARTED)) .toList(); + // 사용자 제출 정보 바탕으로 진행도 결정 DayProgress progress = DayProgress.determineDayProgress(problemStatuses); String mainProblemImageUrl = getMainProblemImageUrl(publish.getProblemSetId());