package de.learny.service; import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import de.learny.dataaccess.AnswerRepository; import de.learny.dataaccess.TestScoreRepository; import de.learny.domain.Answer; import de.learny.domain.Question; import de.learny.domain.TestScore; @Service public class NewTestScoreHandler { @Autowired TestScoreRepository testScoreRepo; @Autowired AnswerRepository answerRepo; public void addNew(TestScore testScore, Set<Question> questions) { testCalculate(testScore,questions); } private int calculateScore(int score, int answers) { int result = score * 100 / answers; return result; } private void testCalculate(TestScore testScore,Set<Question> questions){ int score = 0; int answerCount = 0; for(Question question: questions){ int points = 0; int checked = 0; int count = 0; int correctChecked = 0; for(Answer a: question.getAnswers()){ count++; answerCount++; Answer answer = answerRepo.findById(a.getId()); if(a.isCorrect()){ checked++; } if(a.isCorrect() == answer.isCorrect()){ points++; if(a.isCorrect()){ correctChecked++; } } else{ answer.addToErrorCount(); } answer.addToAnswerCount(); answerRepo.save(answer); } //Wenn nichts, alles oder keine einzige Antwort richtig angekreuzt //--> dann gibt es 0 Punkte für diese eine Question if(checked == 0 || checked == count || correctChecked == 0){ points = 0; } score = score + points; } testScore.setScore(calculateScore(score, answerCount)); testScoreRepo.save(testScore); } }