feat(transaction-log): more details about submission files

This commit is contained in:
Gregor Kleen 2021-02-24 12:39:32 +01:00
parent 56e9212e65
commit b9cc5b9970
3 changed files with 19 additions and 21 deletions

View File

@ -10,7 +10,7 @@ SubmissionEdit -- user uploads new version of their submissio
user UserId Maybe -- track id, important for group submissions user UserId Maybe -- track id, important for group submissions
time UTCTime time UTCTime
submission SubmissionId submission SubmissionId
SubmissionFile -- files that are part of a submission SubmissionFile json -- files that are part of a submission
submission SubmissionId submission SubmissionId
title FilePath title FilePath
content FileContentReference Maybe 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) 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 isDeletion Bool -- only set if isUpdate is also set, but file was deleted by corrector
UniqueSubmissionFile submission title isUpdate UniqueSubmissionFile submission title isUpdate
deriving Show deriving Eq Ord Read Show
SubmissionUser -- which submission belongs to whom SubmissionUser -- which submission belongs to whom
user UserId user UserId
submission SubmissionId submission SubmissionId

View File

@ -90,12 +90,10 @@ data Transaction
} }
| TransactionSubmissionFileEdit | TransactionSubmissionFileEdit
{ transactionSubmissionFile :: SubmissionFileId { transactionSubmissionFile :: Entity SubmissionFile
, transactionSubmission :: SubmissionId
} }
| TransactionSubmissionFileDelete | TransactionSubmissionFileDelete
{ transactionSubmissionFile :: SubmissionFileId { transactionSubmissionFile :: Entity SubmissionFile
, transactionSubmission :: SubmissionId
} }
| TransactionExamOfficeUserAdd | TransactionExamOfficeUserAdd

View File

@ -602,15 +602,15 @@ sinkSubmission userId mExists isUpdate = do
when anyChanges $ do when anyChanges $ do
touchSubmission touchSubmission
forM_ collidingFiles $ \(Entity sfId' _) -> lift $ do forM_ collidingFiles $ \sfEnt@(Entity sfId' _) -> lift $ do
delete sfId' delete sfId'
audit $ TransactionSubmissionFileDelete sfId' submissionId audit $ TransactionSubmissionFileDelete sfEnt
lift $ if lift $ if
| matchesUnderlying | matchesUnderlying
, isUpdate , isUpdate
-> return () -> return ()
| otherwise -> do | otherwise -> do
subFileId <- insert $ subFile <- insertEntity $
_FileReference # ( file _FileReference # ( file
, SubmissionFileResidual , SubmissionFileResidual
{ submissionFileResidualSubmission = submissionId { submissionFileResidualSubmission = submissionId
@ -618,12 +618,12 @@ sinkSubmission userId mExists isUpdate = do
, submissionFileResidualIsDeletion = False , submissionFileResidualIsDeletion = False
} }
) )
audit $ TransactionSubmissionFileEdit subFileId submissionId audit $ TransactionSubmissionFileEdit subFile
when undoneDeletion $ do when undoneDeletion $ do
touchSubmission touchSubmission
forM_ (filter (submissionFileIsDeletion . entityVal) collidingFiles) $ \(Entity sfId' _) -> lift $ do forM_ (filter (submissionFileIsDeletion . entityVal) collidingFiles) $ \sfEnt@(Entity sfId' _) -> lift $ do
delete sfId' delete sfId'
audit $ TransactionSubmissionFileDelete sfId' submissionId audit $ TransactionSubmissionFileDelete sfEnt
Right (submissionId', r) -> do Right (submissionId', r) -> do
$logDebugS "sinkSubmission" $ tshow submissionId' $logDebugS "sinkSubmission" $ tshow submissionId'
@ -731,19 +731,19 @@ sinkSubmission userId mExists isUpdate = do
return sf return sf
if if
| isUpdate -> forM_ missingFiles $ \(Entity sfId SubmissionFile{..}) -> do | isUpdate -> forM_ missingFiles $ \sfEnt@(Entity sfId SubmissionFile{..}) -> do
shadowing <- existsBy $ UniqueSubmissionFile submissionFileSubmission submissionFileTitle False shadowing <- existsBy $ UniqueSubmissionFile submissionFileSubmission submissionFileTitle False
if if
| not shadowing -> do | not shadowing -> do
delete sfId delete sfId
audit $ TransactionSubmissionFileDelete sfId submissionId audit $ TransactionSubmissionFileDelete sfEnt
| submissionFileIsUpdate -> do | submissionFileIsUpdate -> do
update sfId [ SubmissionFileContent =. Nothing, SubmissionFileIsDeletion =. True ] sfRec <- updateGet sfId [ SubmissionFileContent =. Nothing, SubmissionFileIsDeletion =. True ]
audit $ TransactionSubmissionFileEdit sfId submissionId audit . TransactionSubmissionFileEdit $ Entity sfId sfRec
| otherwise -> do | otherwise -> do
now <- liftIO getCurrentTime now <- liftIO getCurrentTime
sfId' <- insert $ SubmissionFile sfEnt' <- insertEntity $ SubmissionFile
{ submissionFileSubmission = submissionId { submissionFileSubmission = submissionId
, submissionFileTitle , submissionFileTitle
, submissionFileModified = now , submissionFileModified = now
@ -751,16 +751,16 @@ sinkSubmission userId mExists isUpdate = do
, submissionFileIsUpdate = True , submissionFileIsUpdate = True
, submissionFileIsDeletion = True , submissionFileIsDeletion = True
} }
audit $ TransactionSubmissionFileEdit sfId' submissionId audit $ TransactionSubmissionFileEdit sfEnt'
| otherwise -> do | otherwise -> do
shadowed <- selectKeysList shadowed <- selectList
[ SubmissionFileSubmission ==. submissionId [ SubmissionFileSubmission ==. submissionId
, SubmissionFileIsUpdate ==. False , SubmissionFileIsUpdate ==. False
, SubmissionFileId <-. map entityKey missingFiles , SubmissionFileId <-. map entityKey missingFiles
] [] ] []
forM_ shadowed $ \sfId' -> do forM_ shadowed $ \sfEnt'@(Entity sfId' _) -> do
delete sfId' delete sfId'
audit $ TransactionSubmissionFileDelete sfId' submissionId audit $ TransactionSubmissionFileDelete sfEnt'
if if
| isUpdate | isUpdate