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
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

View File

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

View File

@ -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