fix(submissions): add check if users in groupMembers are already submittors on submission

This commit is contained in:
Luca Maio 2022-02-11 23:22:36 +01:00
parent 3820eb1fab
commit 4854d9c866

View File

@ -417,9 +417,16 @@ submissionHelper tid ssh csh shn mcid = do
E.where_ $ (user E.^. UserId) `E.in_` E.valList gIds
let
isParticipant = E.exists . E.from $ \courseParticipant -> do
E.where_ $ user E.^. UserId E.==. courseParticipant E.^. CourseParticipantUser
E.where_ $ (user E.^. UserId E.==. courseParticipant E.^. CourseParticipantUser
E.&&. courseParticipant E.^. CourseParticipantCourse E.==. E.val sheetCourse
E.&&. courseParticipant E.^. CourseParticipantState E.==. E.val CourseParticipantActive
E.&&. courseParticipant E.^. CourseParticipantState E.==. E.val CourseParticipantActive)
isOldUser = E.exists . E.from $ \(submissionUser `E.InnerJoin` submission) -> do
E.on $ submissionUser E.^. SubmissionUserSubmission E.==. submission E.^. SubmissionId
E.where_ $ submissionUser E.^. SubmissionUserUser E.==. user E.^. UserId
E.&&. submission E.^. SubmissionSheet E.==. E.val shid
case msmid of
Nothing -> return ()
Just smid -> E.where_ $ submission E.^. SubmissionId E.==. E.val smid
hasSubmitted = E.exists . E.from $ \(submissionUser `E.InnerJoin` submission) -> do
E.on $ submissionUser E.^. SubmissionUserSubmission E.==. submission E.^. SubmissionId
E.where_ $ submissionUser E.^. SubmissionUserUser E.==. user E.^. UserId
@ -427,7 +434,7 @@ submissionHelper tid ssh csh shn mcid = do
case msmid of -- Multiple `E.where_`-Statements are merged with `&&` in esqueleto 2.5.3
Nothing -> return ()
Just smid -> E.where_ $ submission E.^. SubmissionId E.!=. E.val smid
return (user E.^. UserEmail, (user E.^. UserId, isParticipant, hasSubmitted))
return (user E.^. UserEmail, (user E.^. UserId, isParticipant E.||. isOldUser, hasSubmitted))
$logDebugS "SUBMISSION.AdHocGroupValidation" $ tshow participants