Skip to content

Commit

Permalink
rewrite the points calculation logic
Browse files Browse the repository at this point in the history
  • Loading branch information
scglwsj committed Oct 4, 2024
1 parent f7613aa commit 3b91cad
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 21 deletions.
30 changes: 9 additions & 21 deletions src/main/java/com/quemistry/quiz_ms/service/QuizService.java
Original file line number Diff line number Diff line change
Expand Up @@ -207,17 +207,16 @@ private Page<SimpleQuizResponse> getQuizDetail(UserContext userContext, Page<Qui
.getMcqs();
return quizzes.map(
quiz -> {
List<MCQResponse> quizMcqs =
getMcqResponses(
mcqs,
attempts.stream()
.filter(attempt -> attempt.getQuizId().equals(quiz.getId()))
.collect(Collectors.toList()));
List<QuizAttempt> quizAttempts =
attempts.stream()
.filter(attempt -> attempt.getQuizId().equals(quiz.getId()))
.collect(Collectors.toList());
List<MCQResponse> quizMcqs = getMcqResponses(mcqs, quizAttempts);
return SimpleQuizResponse.builder()
.id(quiz.getId())
.status(quiz.getStatus())
.mcqs(quizMcqs)
.points(calculatePoints(quizMcqs))
.points(calculatePoints(quizAttempts))
.build();
});
}
Expand Down Expand Up @@ -260,7 +259,7 @@ private QuizResponse convertQuiz(

Integer points =
(quiz.getStatus() == COMPLETED)
? calculatePoints(getPageMcqResponses(mcqs.getMcqs(), attempts).toList())
? calculatePoints(attemptRepository.findAllByQuizId(quiz.getId()))
: null;

return QuizResponse.builder()
Expand Down Expand Up @@ -289,18 +288,7 @@ private static Function<QuizAttempt, MCQResponse> getQuizAttemptMCQResponse(List
.orElse(null));
}

// TODO: Refactor this method to use isCorrect field in QuizAttempt
private int calculatePoints(List<MCQResponse> mcqs) {
return (int)
mcqs.stream()
.filter(mcq -> mcq.getAttemptOption() != null)
.filter(
mcq ->
mcq.getOptions().stream()
.anyMatch(
option ->
option.getNo().equals(mcq.getAttemptOption())
&& option.getIsAnswer()))
.count();
private int calculatePoints(List<QuizAttempt> attempts) {
return (int) attempts.stream().filter(QuizAttempt::isCorrect).count();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -301,8 +301,10 @@ void getQuizByIdAndStudentIdReturnCompletedQuizWithCorrectAnswer() {
when(quizRepository.findOneByIdAndStudentId(quizId, "student1")).thenReturn(Optional.of(quiz));
QuizAttempt attempt = QuizAttempt.create(quizId, mcqId1);
attempt.setOptionNo(1);
attempt.setCorrect(true);
when(attemptRepository.findPageByQuizId(quizId, PageRequest.of(0, 10)))
.thenReturn(new PageImpl<>(List.of(attempt), PageRequest.of(0, 10), 1));
when(attemptRepository.findAllByQuizId(quizId)).thenReturn(List.of(attempt));
when(questionClient.retrieveMCQsByIds(
argThat(request -> request.getIds().contains(mcqId1)), any(), any(), any()))
.thenReturn(retrieveMCQResponse);
Expand Down Expand Up @@ -467,6 +469,7 @@ void getCompletedQuizWithFirstPage() {
.thenReturn(quizzes);
QuizAttempt attempt = QuizAttempt.create(1L, 1L);
attempt.setOptionNo(1);
attempt.setCorrect(true);
when(attemptRepository.findAllByQuizIdIn(argThat(argument -> argument.contains(1L))))
.thenReturn(List.of(attempt));
when(questionClient.retrieveMCQsByIds(any(RetrieveMCQByIdsRequest.class), any(), any(), any()))
Expand Down

0 comments on commit 3b91cad

Please sign in to comment.