From 0084f82786465f742afe38022fb91d904c289f64 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: Thu, 17 Apr 2025 21:57:38 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[feat]=20concept=20tag=20=EC=97=90=EB=9F=AC?= =?UTF-8?q?=20=EB=A1=9C=EA=B9=85=EC=9D=84=20=EC=B6=94=EA=B0=80=ED=95=B4?= =?UTF-8?q?=EC=9A=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/concept/repository/ConceptTagRepository.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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 323bdef..d00f87b 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; } From 35fbbe7ee02b647db4551d1b236efd35188f0cb6 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: Sun, 20 Apr 2025 19:51:30 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[feat]=20=ED=86=B5=EA=B3=84=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=EC=8B=9C=20=EA=B0=81=20=ED=83=80=EC=9E=85=20id?= =?UTF-8?q?=EB=A1=9C=20=EC=A1=B0=ED=9A=8C=ED=95=B4=EC=9A=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ChildProblemStatisticRepository.java | 10 ++++--- .../ProblemSetStatisticRepository.java | 5 ---- .../ProblemStatisticRepository.java | 11 +++++--- .../service/CountStatisticsUpdateService.java | 26 +++++++++++++------ .../CountStatisticsUpdateServiceTest.java | 12 ++++----- 5 files changed, 39 insertions(+), 25 deletions(-) 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 31f1066..9d68650 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 4fc4427..3eaad57 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 59bbfcc..4862b3c 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 6c35620..115507a 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 94e133e..fb663ce 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); }