From b6a72d9a454860fd22d43cbf3108a4848a246eeb Mon Sep 17 00:00:00 2001 From: Sarah Vaupel Date: Thu, 10 Jun 2021 15:13:55 +0200 Subject: [PATCH] chore(exams): connect exam authorship statement form part to model --- models/exams.model | 2 +- src/Handler/Exam/Edit.hs | 15 ++++++++++++++- src/Handler/Exam/New.hs | 4 +++- test/Database/Fill.hs | 1 + 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/models/exams.model b/models/exams.model index e756e1df2..e75996be3 100644 --- a/models/exams.model +++ b/models/exams.model @@ -20,7 +20,7 @@ Exam examMode ExamMode staff Text Maybe partsFrom UTCTime Maybe --- authorshipStatement AuthorshipStatementDefinitionId Maybe + authorshipStatement AuthorshipStatementDefinitionId Maybe UniqueExam course name deriving Generic ExamPart diff --git a/src/Handler/Exam/Edit.hs b/src/Handler/Exam/Edit.hs index 875e99025..cc00bbc35 100644 --- a/src/Handler/Exam/Edit.hs +++ b/src/Handler/Exam/Edit.hs @@ -40,6 +40,19 @@ postEEditR tid ssh csh examn = do editExamAct <- formResultMaybe editExamResult $ \ExamForm{..} -> do res <- trySql @ExamEditException $ do + mAuthorshipStatementId <- case efAuthorshipStatement of + Nothing -> return Nothing + Just newStatementContent -> do + mPreviousStatement <- maybe (pure Nothing) getEntity (oldExam ^. _examAuthorshipStatement) + if + | Just (Entity previousStatementId AuthorshipStatementDefinition{authorshipStatementDefinitionContent=previousStatementContent}) <- mPreviousStatement + , newStatementContent == previousStatementContent + -> return $ Just previousStatementId + | Just (Entity previousStatementId _) <- mPreviousStatement + -> update previousStatementId [ AuthorshipStatementDefinitionContent =. newStatementContent ] >> return (Just previousStatementId) + | otherwise + -> fmap Just $ insert AuthorshipStatementDefinition { authorshipStatementDefinitionContent = newStatementContent } + insertRes <- myReplaceUnique eId Exam { examCourse = cid , examName = efName @@ -60,9 +73,9 @@ postEEditR tid ssh csh examn = do , examGradingMode = efGradingMode , examDescription = efDescription , examExamMode = efExamMode - -- , examAuthorshipStatement = Nothing -- TODO , examStaff = efStaff , examPartsFrom = efPartsFrom + , examAuthorshipStatement = mAuthorshipStatementId } when (is _Just insertRes) $ diff --git a/src/Handler/Exam/New.hs b/src/Handler/Exam/New.hs index 09b8a6dbe..cda9f41c2 100644 --- a/src/Handler/Exam/New.hs +++ b/src/Handler/Exam/New.hs @@ -29,6 +29,8 @@ postCExamNewR tid ssh csh = do newExamAct <- formResultMaybe newExamResult $ \ExamForm{..} -> do now <- liftIO getCurrentTime + mAuthorshipStatementId <- maybe (return Nothing) (fmap Just . insert . AuthorshipStatementDefinition) efAuthorshipStatement + insertRes <- insertUnique Exam { examName = efName , examCourse = cid @@ -49,9 +51,9 @@ postCExamNewR tid ssh csh = do , examPublicStatistics = efPublicStatistics , examDescription = efDescription , examExamMode = efExamMode - -- , examAuthorshipStatement = Nothing -- TODO , examStaff = efStaff , examPartsFrom = efPartsFrom + , examAuthorshipStatement = mAuthorshipStatementId } whenIsJust insertRes $ \examid -> do insertMany_ diff --git a/test/Database/Fill.hs b/test/Database/Fill.hs index 818fbd85f..3ae3e5c12 100644 --- a/test/Database/Fill.hs +++ b/test/Database/Fill.hs @@ -734,6 +734,7 @@ fillDb = do } -- , examAuthorshipStatement = Nothing , examStaff = Just "Hofmann" + , examAuthorshipStatement = Nothing } _ <- insert' Material { materialCourse = ffp