diff --git a/src/main/java/com/moplus/moplus_server/domain/concept/repository/ConceptTagRepository.java b/src/main/java/com/moplus/moplus_server/domain/concept/repository/ConceptTagRepository.java index 323bdef6..d00f87b2 100644 --- a/src/main/java/com/moplus/moplus_server/domain/concept/repository/ConceptTagRepository.java +++ b/src/main/java/com/moplus/moplus_server/domain/concept/repository/ConceptTagRepository.java @@ -23,9 +23,13 @@ default void existsByIdElseThrow(Set ids) { default List findAllByIdsElseThrow(Set ids) { List conceptTags = findAllById(ids); + List foundIds = conceptTags.stream() + .map(ConceptTag::getId) + .toList(); + if (conceptTags.size() != ids.size()) { throw new NotFoundException(ErrorCode.CONCEPT_TAG_NOT_FOUND_IN_LIST, - "targetIds: " + ids + " / foundIds: " + conceptTags); + "targetIds: " + ids + " / foundIds: " + foundIds); } return conceptTags; } diff --git a/src/main/java/com/moplus/moplus_server/statistic/Problem/repository/ChildProblemStatisticRepository.java b/src/main/java/com/moplus/moplus_server/statistic/Problem/repository/ChildProblemStatisticRepository.java index 31f10665..9d686502 100644 --- a/src/main/java/com/moplus/moplus_server/statistic/Problem/repository/ChildProblemStatisticRepository.java +++ b/src/main/java/com/moplus/moplus_server/statistic/Problem/repository/ChildProblemStatisticRepository.java @@ -3,11 +3,15 @@ import com.moplus.moplus_server.global.error.exception.ErrorCode; import com.moplus.moplus_server.global.error.exception.NotFoundException; import com.moplus.moplus_server.statistic.Problem.domain.ChildProblemStatistic; +import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; public interface ChildProblemStatisticRepository extends JpaRepository { - default ChildProblemStatistic findByIdElseThrow(Long id) { - return findById(id) - .orElseThrow(() -> new NotFoundException(ErrorCode.CHILD_PROBLEM_STATISTIC_NOT_FOUND)); + + Optional findByChildProblemId(Long childProblemId); + + default ChildProblemStatistic findByChildProblemIdOrElse(Long childProblemId) { + return findByChildProblemId(childProblemId) + .orElseThrow(() -> new NotFoundException(ErrorCode.CHILD_PROBLEM_STATISTIC_NOT_FOUND)); } } \ No newline at end of file diff --git a/src/main/java/com/moplus/moplus_server/statistic/Problem/repository/ProblemSetStatisticRepository.java b/src/main/java/com/moplus/moplus_server/statistic/Problem/repository/ProblemSetStatisticRepository.java index 4fc4427f..3eaad573 100644 --- a/src/main/java/com/moplus/moplus_server/statistic/Problem/repository/ProblemSetStatisticRepository.java +++ b/src/main/java/com/moplus/moplus_server/statistic/Problem/repository/ProblemSetStatisticRepository.java @@ -14,9 +14,4 @@ default ProblemSetStatistic findByProblemSetIdElseThrow(Long id) { return findByProblemSetId(id) .orElseThrow(() -> new NotFoundException(ErrorCode.PROBLEM_SET_STATISTIC_NOT_FOUND)); } - - default ProblemSetStatistic findByIdElseThrow(Long id) { - return findById(id) - .orElseThrow(() -> new NotFoundException(ErrorCode.PROBLEM_SET_STATISTIC_NOT_FOUND)); - } } \ No newline at end of file diff --git a/src/main/java/com/moplus/moplus_server/statistic/Problem/repository/ProblemStatisticRepository.java b/src/main/java/com/moplus/moplus_server/statistic/Problem/repository/ProblemStatisticRepository.java index 59bbfcc5..4862b3c2 100644 --- a/src/main/java/com/moplus/moplus_server/statistic/Problem/repository/ProblemStatisticRepository.java +++ b/src/main/java/com/moplus/moplus_server/statistic/Problem/repository/ProblemStatisticRepository.java @@ -3,11 +3,16 @@ import com.moplus.moplus_server.global.error.exception.ErrorCode; import com.moplus.moplus_server.global.error.exception.NotFoundException; import com.moplus.moplus_server.statistic.Problem.domain.ProblemStatistic; +import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; + public interface ProblemStatisticRepository extends JpaRepository { - default ProblemStatistic findByIdElseThrow(Long id) { - return findById(id) - .orElseThrow(() -> new NotFoundException(ErrorCode.PROBLEM_STATISTIC_NOT_FOUND)); + + Optional findByProblemId(Long problemId); + + default ProblemStatistic findByProblemIdElseThrow(Long problemId) { + return findByProblemId(problemId) + .orElseThrow(() -> new NotFoundException(ErrorCode.PROBLEM_STATISTIC_NOT_FOUND)); } } \ No newline at end of file diff --git a/src/main/java/com/moplus/moplus_server/statistic/Problem/service/CountStatisticsUpdateService.java b/src/main/java/com/moplus/moplus_server/statistic/Problem/service/CountStatisticsUpdateService.java index 6c356203..115507a9 100644 --- a/src/main/java/com/moplus/moplus_server/statistic/Problem/service/CountStatisticsUpdateService.java +++ b/src/main/java/com/moplus/moplus_server/statistic/Problem/service/CountStatisticsUpdateService.java @@ -10,9 +10,11 @@ import com.moplus.moplus_server.statistic.Problem.repository.ProblemSetStatisticRepository; import com.moplus.moplus_server.statistic.Problem.repository.ProblemStatisticRepository; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +@Slf4j @Service @RequiredArgsConstructor public class CountStatisticsUpdateService { @@ -21,8 +23,8 @@ public class CountStatisticsUpdateService { private final ChildProblemStatisticRepository childProblemStatisticRepository; @Transactional - public void updateStatistics(Long statisticId, StatisticFieldType type, StatisticEntityTarget target) { - StatisticCounter statistic = findStatistic(statisticId, target); + public void updateStatistics(Long statisticEntityTargetId, StatisticFieldType type, StatisticEntityTarget target) { + StatisticCounter statistic = findStatistic(statisticEntityTargetId, target); statistic.updateCount(type); } @@ -35,11 +37,19 @@ public void createStatistics(Long statisticId, StatisticEntityTarget target) { } } - private StatisticCounter findStatistic(Long statisticId, StatisticEntityTarget target) { - return switch (target) { - case PROBLEM -> problemStatisticRepository.findByIdElseThrow(statisticId); - case PROBLEM_SET -> problemSetStatisticRepository.findByIdElseThrow(statisticId); - case CHILD_PROBLEM -> childProblemStatisticRepository.findByIdElseThrow(statisticId); - }; + private StatisticCounter findStatistic(Long statisticEntityTargetId, StatisticEntityTarget target) { + try { + return switch (target) { + case PROBLEM -> problemStatisticRepository.findByProblemIdElseThrow(statisticEntityTargetId); + case PROBLEM_SET -> problemSetStatisticRepository.findByProblemSetIdElseThrow(statisticEntityTargetId); + case CHILD_PROBLEM -> + childProblemStatisticRepository.findByChildProblemIdOrElse(statisticEntityTargetId); + }; + } catch (Exception e) { + String message = String.format("๐Ÿ“Œ [ํ†ต๊ณ„ ์กฐํšŒ ์‹คํŒจ] targetType=%s, id=%d, error=%s", target, + statisticEntityTargetId, e.getMessage()); + log.warn(message, e); + throw e; + } } } diff --git a/src/test/java/com/moplus/moplus_server/statistic/Problem/service/CountStatisticsUpdateServiceTest.java b/src/test/java/com/moplus/moplus_server/statistic/Problem/service/CountStatisticsUpdateServiceTest.java index 94e133e3..fb663cec 100644 --- a/src/test/java/com/moplus/moplus_server/statistic/Problem/service/CountStatisticsUpdateServiceTest.java +++ b/src/test/java/com/moplus/moplus_server/statistic/Problem/service/CountStatisticsUpdateServiceTest.java @@ -36,7 +36,7 @@ class CountStatisticsUpdateServiceTest { // given Long problemId = 1L; ProblemStatistic problemStatistic = new ProblemStatistic(problemId); - given(problemStatisticRepository.findByIdElseThrow(problemId)) + given(problemStatisticRepository.findByProblemIdElseThrow(problemId)) .willReturn(problemStatistic); // when @@ -44,7 +44,7 @@ class CountStatisticsUpdateServiceTest { StatisticEntityTarget.PROBLEM); // then - verify(problemStatisticRepository).findByIdElseThrow(problemId); + verify(problemStatisticRepository).findByProblemIdElseThrow(problemId); assertThat(problemStatistic.getViewCount()).isEqualTo(1L); assertThat(problemStatistic.getSubmitCount()).isEqualTo(0L); } @@ -54,7 +54,7 @@ class CountStatisticsUpdateServiceTest { // given Long problemSetId = 1L; ProblemSetStatistic problemSetStatistic = new ProblemSetStatistic(problemSetId); - given(problemSetStatisticRepository.findByIdElseThrow(problemSetId)) + given(problemSetStatisticRepository.findByProblemSetIdElseThrow(problemSetId)) .willReturn(problemSetStatistic); // when @@ -62,7 +62,7 @@ class CountStatisticsUpdateServiceTest { StatisticEntityTarget.PROBLEM_SET); // then - verify(problemSetStatisticRepository).findByIdElseThrow(problemSetId); + verify(problemSetStatisticRepository).findByProblemSetIdElseThrow(problemSetId); assertThat(problemSetStatistic.getSubmitCount()).isEqualTo(1L); assertThat(problemSetStatistic.getViewCount()).isEqualTo(0L); } @@ -72,7 +72,7 @@ class CountStatisticsUpdateServiceTest { // given Long childProblemId = 1L; ChildProblemStatistic childProblemStatistic = new ChildProblemStatistic(childProblemId); - given(childProblemStatisticRepository.findByIdElseThrow(childProblemId)) + given(childProblemStatisticRepository.findByChildProblemIdOrElse(childProblemId)) .willReturn(childProblemStatistic); // when @@ -80,7 +80,7 @@ class CountStatisticsUpdateServiceTest { StatisticEntityTarget.CHILD_PROBLEM); // then - verify(childProblemStatisticRepository).findByIdElseThrow(childProblemId); + verify(childProblemStatisticRepository).findByChildProblemIdOrElse(childProblemId); assertThat(childProblemStatistic.getViewCount()).isEqualTo(1L); assertThat(childProblemStatistic.getSubmitCount()).isEqualTo(0L); }