diff --git a/src/main/java/com/moplus/moplus_server/client/problem/controller/ProblemGetController.java b/src/main/java/com/moplus/moplus_server/client/problem/controller/ProblemGetController.java index a38d994..35017a9 100644 --- a/src/main/java/com/moplus/moplus_server/client/problem/controller/ProblemGetController.java +++ b/src/main/java/com/moplus/moplus_server/client/problem/controller/ProblemGetController.java @@ -6,7 +6,7 @@ import com.moplus.moplus_server.client.problem.dto.response.ProblemClientGetResponse; import com.moplus.moplus_server.client.problem.dto.response.ProblemClientThumbnailResponse; import com.moplus.moplus_server.client.problem.dto.response.PublishClientGetResponse; -import com.moplus.moplus_server.client.problem.service.ProblemsGetService; +import com.moplus.moplus_server.client.problem.service.ClientProblemsGetService; import com.moplus.moplus_server.global.annotation.AuthUser; import com.moplus.moplus_server.member.domain.Member; import io.swagger.v3.oas.annotations.Operation; @@ -25,7 +25,7 @@ @RequiredArgsConstructor public class ProblemGetController { - private final ProblemsGetService problemsGetService; + private final ClientProblemsGetService clientProblemsGetService; @GetMapping("problem/all/{year}/{month}") @Operation(summary = "전체 문제 조회", description = "월별 문제들에 대한 진행도와 정보들을 조회합니다.") @@ -34,7 +34,7 @@ public ResponseEntity> getAllProblem( @PathVariable("month") int month, @AuthUser Member member ) { - return ResponseEntity.ok(problemsGetService.getAllProblem(member.getId(), year, month)); + return ResponseEntity.ok(clientProblemsGetService.getAllProblem(member.getId(), year, month)); } @GetMapping("problem/{publishId}") @@ -43,7 +43,7 @@ public ResponseEntity getProblemsInPublish( @PathVariable("publishId") Long publishId, @AuthUser Member member ) { - return ResponseEntity.ok(problemsGetService.getProblemsInPublish(member.getId(), publishId)); + return ResponseEntity.ok(clientProblemsGetService.getProblemsInPublish(member.getId(), publishId)); } @GetMapping("problem/{publishId}/{problemId}") @@ -53,7 +53,7 @@ public ResponseEntity getProblem( @PathVariable("problemId") Long problemId, @AuthUser Member member ) { - return ResponseEntity.ok(problemsGetService.getProblem(member.getId(), publishId, problemId)); + return ResponseEntity.ok(clientProblemsGetService.getProblem(member.getId(), publishId, problemId)); } @GetMapping("problem/{publishId}/{problemId}/{childProblemId}") @@ -65,7 +65,7 @@ public ResponseEntity getChildProblem( @AuthUser Member member ) { return ResponseEntity.ok( - problemsGetService.getChildProblem(member.getId(), publishId, problemId, childProblemId)); + clientProblemsGetService.getChildProblem(member.getId(), publishId, problemId, childProblemId)); } @GetMapping("problem/thumbnail/{publishId}/{problemId}") @@ -74,7 +74,7 @@ public ResponseEntity getProblemThumbnail( @PathVariable Long publishId, @PathVariable Long problemId ) { - return ResponseEntity.ok(problemsGetService.getProblemThumbnail(publishId, problemId)); + return ResponseEntity.ok(clientProblemsGetService.getProblemThumbnail(publishId, problemId)); } @GetMapping("problem/child/{publishId}/{problemId}") @@ -83,6 +83,6 @@ public ResponseEntity getChildProblems( @PathVariable Long publishId, @PathVariable Long problemId ) { - return ResponseEntity.ok(problemsGetService.getChildProblems(publishId, problemId)); + return ResponseEntity.ok(clientProblemsGetService.getChildProblems(publishId, problemId)); } } diff --git a/src/main/java/com/moplus/moplus_server/client/problem/service/ProblemsGetService.java b/src/main/java/com/moplus/moplus_server/client/problem/service/ClientProblemsGetService.java similarity index 97% rename from src/main/java/com/moplus/moplus_server/client/problem/service/ProblemsGetService.java rename to src/main/java/com/moplus/moplus_server/client/problem/service/ClientProblemsGetService.java index 27c16e1..bbcb063 100644 --- a/src/main/java/com/moplus/moplus_server/client/problem/service/ProblemsGetService.java +++ b/src/main/java/com/moplus/moplus_server/client/problem/service/ClientProblemsGetService.java @@ -6,8 +6,8 @@ import com.moplus.moplus_server.client.problem.dto.response.ChildProblemClientGetResponse; import com.moplus.moplus_server.client.problem.dto.response.ChildProblemsClientGetResponse; import com.moplus.moplus_server.client.problem.dto.response.ProblemClientGetResponse; -import com.moplus.moplus_server.client.problem.dto.response.ProblemFeedProgressesGetResponse; import com.moplus.moplus_server.client.problem.dto.response.ProblemClientThumbnailResponse; +import com.moplus.moplus_server.client.problem.dto.response.ProblemFeedProgressesGetResponse; import com.moplus.moplus_server.client.problem.dto.response.PublishClientGetResponse; import com.moplus.moplus_server.client.submit.domain.ChildProblemSubmit; import com.moplus.moplus_server.client.submit.domain.ChildProblemSubmitStatus; @@ -29,14 +29,13 @@ import java.time.LocalDate; import java.util.ArrayList; import java.util.List; -import java.util.stream.IntStream; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service @RequiredArgsConstructor -public class ProblemsGetService { +public class ClientProblemsGetService { private static final int MIN_MONTH = 1; private static final int MAX_MONTH = 12; @@ -134,10 +133,8 @@ public ProblemClientGetResponse getProblem(Long memberId, Long publishId, Long p .map(ChildProblem::getId) .toList(); - List childProblemStatuses = childProblemSubmitRepository.findAllByMemberIdAndPublishIdAndChildProblemIdIn( - memberId, publishId, childProblemIds).stream() - .map(ChildProblemSubmit::getStatus) - .toList(); + List childProblemStatuses = childProblemSubmitRepository + .findAllChildProblemSubmitStatusWithDefault(memberId, publishId, childProblemIds); return ProblemClientGetResponse.of(problem, problemSubmit.getStatus(), childProblemStatuses, number + 1); } diff --git a/src/main/java/com/moplus/moplus_server/client/submit/repository/ChildProblemSubmitRepository.java b/src/main/java/com/moplus/moplus_server/client/submit/repository/ChildProblemSubmitRepository.java index 33a5be8..7ff08e7 100644 --- a/src/main/java/com/moplus/moplus_server/client/submit/repository/ChildProblemSubmitRepository.java +++ b/src/main/java/com/moplus/moplus_server/client/submit/repository/ChildProblemSubmitRepository.java @@ -1,20 +1,43 @@ package com.moplus.moplus_server.client.submit.repository; import com.moplus.moplus_server.client.submit.domain.ChildProblemSubmit; +import com.moplus.moplus_server.client.submit.domain.ChildProblemSubmitStatus; import com.moplus.moplus_server.global.error.exception.ErrorCode; import com.moplus.moplus_server.global.error.exception.NotFoundException; import java.util.List; +import java.util.Map; import java.util.Optional; +import java.util.stream.Collectors; import org.springframework.data.jpa.repository.JpaRepository; public interface ChildProblemSubmitRepository extends JpaRepository { - Optional findByMemberIdAndPublishIdAndChildProblemId(Long memberId, Long publishId, Long childProblemId); + Optional findByMemberIdAndPublishIdAndChildProblemId(Long memberId, Long publishId, + Long childProblemId); - default ChildProblemSubmit findByMemberIdAndPublishIdAndChildProblemIdElseThrow(Long memberId, Long publishId, Long childProblemId) { + default ChildProblemSubmit findByMemberIdAndPublishIdAndChildProblemIdElseThrow(Long memberId, Long publishId, + Long childProblemId) { return findByMemberIdAndPublishIdAndChildProblemId(memberId, publishId, childProblemId).orElseThrow( () -> new NotFoundException(ErrorCode.CHILD_PROBLEM_SUBMIT_NOT_CONFIRMED)); } List findAllByMemberIdAndPublishIdAndChildProblemIdIn(Long memberId, Long publishId, - List childProblemIds); + List childProblemIds); + + default List findAllChildProblemSubmitStatusWithDefault(Long memberId, Long publishId, + List childProblemIds) { + List submits = findAllByMemberIdAndPublishIdAndChildProblemIdIn(memberId, publishId, + childProblemIds); + + // childProblemId를 key로 하는 Map 생성 + Map statusMap = submits.stream() + .collect(Collectors.toMap( + ChildProblemSubmit::getChildProblemId, + ChildProblemSubmit::getStatus + )); + + // 모든 childProblemId에 대해 status 리스트 생성 + return childProblemIds.stream() + .map(id -> statusMap.getOrDefault(id, ChildProblemSubmitStatus.NOT_STARTED)) + .collect(Collectors.toList()); + } }