Skip to content

Commit

Permalink
fix problem with finding submissions for tutors to be assessed
Browse files Browse the repository at this point in the history
Signed-off-by: Stephan Krusche <[email protected]>
  • Loading branch information
Stephan Krusche committed Apr 15, 2019
1 parent edd6e7c commit d9a4c54
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ public interface ParticipationRepository extends JpaRepository<Participation, Lo
@Query("select distinct participation from Participation participation left join fetch participation.results where participation.exercise.id = :#{#exerciseId} and participation.student.id = :#{#studentId}")
List<Participation> findByExerciseIdAndStudentIdWithEagerResults(@Param("exerciseId") Long exerciseId, @Param("studentId") Long studentId);

@Query("select distinct participation from Participation participation left join fetch participation.submissions where participation.exercise.id = :#{#exerciseId}")
List<Participation> findByExerciseIdWithEagerSubmissions(@Param("exerciseId") Long exerciseId);

// TODO: this call does not work at the moment
@Query("select distinct participation from Participation participation left join fetch participation.submissions submission where participation.exercise.id = :#{#exerciseId} and submission.submitted = true and submission.result is null")
List<Participation> findByExerciseIdWithEagerSubmittedSubmissionsWithoutResults(@Param("exerciseId") Long exerciseId);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,10 +86,16 @@ public Optional<ModelingSubmission> getModelingSubmissionWithoutResult(ModelingE
}
}
// otherwise return any submission that is not assessed
return participationService.findByExerciseIdWithEagerSubmittedSubmissionsWithoutResults(modelingExercise.getId()).stream()
.peek(participation -> participation.getExercise().setParticipations(null))
// Map to Latest Submission
.map(Participation::findLatestModelingSubmission).filter(Optional::isPresent).map(Optional::get).findAny();
// TODO: optimize performance
return this.participationService.findByExerciseIdWithEagerSubmittedSubmissionsWithoutResults(modelingExercise.getId()).stream()
.peek(participation -> participation.getExercise().setParticipations(null))
// Map to Latest Submission
.map(Participation::findLatestModelingSubmission).filter(Optional::isPresent).map(Optional::get)
// It needs to be submitted to be ready for assessment
.filter(Submission::isSubmitted).filter(modelingSubmission -> {
Result result = resultRepository.findDistinctBySubmissionId(modelingSubmission.getId()).orElse(null);
return result == null;
}).findAny();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -469,7 +469,9 @@ public List<Participation> findByExerciseIdAndStudentIdWithEagerResults(Long exe

@Transactional(readOnly = true)
public List<Participation> findByExerciseIdWithEagerSubmittedSubmissionsWithoutResults(Long exerciseId) {
return participationRepository.findByExerciseIdWithEagerSubmittedSubmissionsWithoutResults(exerciseId);
// TODO optimize performance
List<Participation> participations = participationRepository.findByExerciseIdWithEagerSubmissions(exerciseId);
return participations;
}

@Transactional(readOnly = true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,10 +106,16 @@ public TextSubmission save(TextSubmission textSubmission) {
*/
@Transactional(readOnly = true)
public Optional<TextSubmission> getTextSubmissionWithoutResult(TextExercise textExercise) {
// TODO: optimize performance
return this.participationService.findByExerciseIdWithEagerSubmittedSubmissionsWithoutResults(textExercise.getId()).stream()
.peek(participation -> participation.getExercise().setParticipations(null))
// Map to Latest Submission
.map(Participation::findLatestTextSubmission).filter(Optional::isPresent).map(Optional::get).findAny();
.map(Participation::findLatestTextSubmission).filter(Optional::isPresent).map(Optional::get)
// It needs to be submitted to be ready for assessment
.filter(Submission::isSubmitted).filter(textSubmission -> {
Result result = resultRepository.findDistinctBySubmissionId(textSubmission.getId()).orElse(null);
return result == null;
}).findAny();
}

/**
Expand Down

0 comments on commit d9a4c54

Please sign in to comment.