From b9cc5b9970cc0b1f61c9df03c54901d9d6e822d0 Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Wed, 24 Feb 2021 12:39:32 +0100 Subject: [PATCH] feat(transaction-log): more details about submission files --- models/submissions.model | 4 ++-- src/Audit/Types.hs | 6 ++---- src/Handler/Utils/Submission.hs | 30 +++++++++++++++--------------- 3 files changed, 19 insertions(+), 21 deletions(-) diff --git a/models/submissions.model b/models/submissions.model index abfe0c6bd..618306feb 100644 --- a/models/submissions.model +++ b/models/submissions.model @@ -10,7 +10,7 @@ SubmissionEdit -- user uploads new version of their submissio user UserId Maybe -- track id, important for group submissions time UTCTime submission SubmissionId -SubmissionFile -- files that are part of a submission +SubmissionFile json -- files that are part of a submission submission SubmissionId title FilePath content FileContentReference Maybe @@ -18,7 +18,7 @@ SubmissionFile -- files that are part of a submission isUpdate Bool -- is this the file updated by a corrector (original will always be retained) isDeletion Bool -- only set if isUpdate is also set, but file was deleted by corrector UniqueSubmissionFile submission title isUpdate - deriving Show + deriving Eq Ord Read Show SubmissionUser -- which submission belongs to whom user UserId submission SubmissionId diff --git a/src/Audit/Types.hs b/src/Audit/Types.hs index 84fd31336..7d4cfa87d 100644 --- a/src/Audit/Types.hs +++ b/src/Audit/Types.hs @@ -90,12 +90,10 @@ data Transaction } | TransactionSubmissionFileEdit - { transactionSubmissionFile :: SubmissionFileId - , transactionSubmission :: SubmissionId + { transactionSubmissionFile :: Entity SubmissionFile } | TransactionSubmissionFileDelete - { transactionSubmissionFile :: SubmissionFileId - , transactionSubmission :: SubmissionId + { transactionSubmissionFile :: Entity SubmissionFile } | TransactionExamOfficeUserAdd diff --git a/src/Handler/Utils/Submission.hs b/src/Handler/Utils/Submission.hs index b3fb15118..e7f5cabf0 100644 --- a/src/Handler/Utils/Submission.hs +++ b/src/Handler/Utils/Submission.hs @@ -602,15 +602,15 @@ sinkSubmission userId mExists isUpdate = do when anyChanges $ do touchSubmission - forM_ collidingFiles $ \(Entity sfId' _) -> lift $ do + forM_ collidingFiles $ \sfEnt@(Entity sfId' _) -> lift $ do delete sfId' - audit $ TransactionSubmissionFileDelete sfId' submissionId + audit $ TransactionSubmissionFileDelete sfEnt lift $ if | matchesUnderlying , isUpdate -> return () | otherwise -> do - subFileId <- insert $ + subFile <- insertEntity $ _FileReference # ( file , SubmissionFileResidual { submissionFileResidualSubmission = submissionId @@ -618,12 +618,12 @@ sinkSubmission userId mExists isUpdate = do , submissionFileResidualIsDeletion = False } ) - audit $ TransactionSubmissionFileEdit subFileId submissionId + audit $ TransactionSubmissionFileEdit subFile when undoneDeletion $ do touchSubmission - forM_ (filter (submissionFileIsDeletion . entityVal) collidingFiles) $ \(Entity sfId' _) -> lift $ do + forM_ (filter (submissionFileIsDeletion . entityVal) collidingFiles) $ \sfEnt@(Entity sfId' _) -> lift $ do delete sfId' - audit $ TransactionSubmissionFileDelete sfId' submissionId + audit $ TransactionSubmissionFileDelete sfEnt Right (submissionId', r) -> do $logDebugS "sinkSubmission" $ tshow submissionId' @@ -731,19 +731,19 @@ sinkSubmission userId mExists isUpdate = do return sf if - | isUpdate -> forM_ missingFiles $ \(Entity sfId SubmissionFile{..}) -> do + | isUpdate -> forM_ missingFiles $ \sfEnt@(Entity sfId SubmissionFile{..}) -> do shadowing <- existsBy $ UniqueSubmissionFile submissionFileSubmission submissionFileTitle False if | not shadowing -> do delete sfId - audit $ TransactionSubmissionFileDelete sfId submissionId + audit $ TransactionSubmissionFileDelete sfEnt | submissionFileIsUpdate -> do - update sfId [ SubmissionFileContent =. Nothing, SubmissionFileIsDeletion =. True ] - audit $ TransactionSubmissionFileEdit sfId submissionId + sfRec <- updateGet sfId [ SubmissionFileContent =. Nothing, SubmissionFileIsDeletion =. True ] + audit . TransactionSubmissionFileEdit $ Entity sfId sfRec | otherwise -> do now <- liftIO getCurrentTime - sfId' <- insert $ SubmissionFile + sfEnt' <- insertEntity $ SubmissionFile { submissionFileSubmission = submissionId , submissionFileTitle , submissionFileModified = now @@ -751,16 +751,16 @@ sinkSubmission userId mExists isUpdate = do , submissionFileIsUpdate = True , submissionFileIsDeletion = True } - audit $ TransactionSubmissionFileEdit sfId' submissionId + audit $ TransactionSubmissionFileEdit sfEnt' | otherwise -> do - shadowed <- selectKeysList + shadowed <- selectList [ SubmissionFileSubmission ==. submissionId , SubmissionFileIsUpdate ==. False , SubmissionFileId <-. map entityKey missingFiles ] [] - forM_ shadowed $ \sfId' -> do + forM_ shadowed $ \sfEnt'@(Entity sfId' _) -> do delete sfId' - audit $ TransactionSubmissionFileDelete sfId' submissionId + audit $ TransactionSubmissionFileDelete sfEnt' if | isUpdate