diff --git a/models/lms.model b/models/lms.model index 4c8ae02ee..0084425f9 100644 --- a/models/lms.model +++ b/models/lms.model @@ -134,13 +134,3 @@ LmsResult timestamp UTCTime default=now() UniqueLmsResult qualification ident -- required by DBTable deriving Generic - --- Logs all processed rows from LmsUserlist and LmsResult -LmsAudit - qualification QualificationId OnDeleteCascade OnUpdateCascade - ident LmsIdent - notificationType LmsStatus -- LmsBlocked Day | LmsSuccess Day - note Text Maybe - received UTCTime -- timestamp from LmsUserlist/LmsResult - processed UTCTime default=now() - deriving Generic diff --git a/src/Audit/Types.hs b/src/Audit/Types.hs index 023dda27e..d99c398d1 100644 --- a/src/Audit/Types.hs +++ b/src/Audit/Types.hs @@ -64,17 +64,6 @@ data Transaction , transactionUser :: UserId } - | TransactionCourseApplicationEdit - { transactionCourse :: CourseId - , transactionUser :: UserId - , transactionCourseApplication :: CourseApplicationId - } - | TransactionCourseApplicationDeleted - { transactionCourse :: CourseId - , transactionUser :: UserId - , transactionCourseApplication :: CourseApplicationId - } - | TransactionSubmissionEdit { transactionSubmission :: SubmissionId , transactionSheet :: SheetId @@ -181,14 +170,24 @@ data Transaction , transactionNewUserIdent :: UserIdent } - | TransactionAllocationUserEdited - { transactionUser :: UserId - , transactionAllocation :: AllocationId + | TransactionLmsBlocked + { transactionQualification :: QualificationId + , transactionLmsIdent :: LmsIdent + , transactionLmsDay :: Day + , transactionLmsUser :: Maybe UserId + , transactionNote :: Maybe Text + , transactionReceived :: UTCTime -- when was the csv file received? } - | TransactionAllocationUserDeleted - { transactionUser :: UserId - , transactionAllocation :: AllocationId + | TransactionLmsSuccess + { transactionQualification :: QualificationId + , transactionLmsIdent :: LmsIdent + , transactionLmsDay :: Day + , transactionLmsUser :: Maybe UserId + , transactionNote :: Maybe Text + , transactionReceived :: UTCTime -- when was the csv file received? } + + -- TODO: SetQualification deriving (Eq, Ord, Read, Show, Generic, Typeable) diff --git a/src/Jobs/Handler/LMS.hs b/src/Jobs/Handler/LMS.hs index 073834cfa..5f55568e9 100644 --- a/src/Jobs/Handler/LMS.hs +++ b/src/Jobs/Handler/LMS.hs @@ -153,12 +153,12 @@ dispatchJobLmsDequeue qid = JobHandlerAtomic act E.where_ $ luser E.^. LmsUserQualification E.==. E.val qid E.&&. luser E.^. LmsUserEnded E.<. E.just (E.val auditCutoff) E.&&. E.isJust (luser E.^. LmsUserEnded) - E.&&. E.notExists (do - laudit <- E.from $ E.table @LmsAudit - E.where_ $ laudit E.^. LmsAuditQualification E.==. E.val qid - E.&&. laudit E.^. LmsAuditIdent E.==. luser E.^. LmsUserIdent - E.&&. laudit E.^. LmsAuditProcessed E.>=. E.val auditCutoff - ) + -- E.&&. E.notExists (do + -- laudit <- E.from $ E.table @LmsAudit + -- E.where_ $ laudit E.^. LmsAuditQualification E.==. E.val qid + -- E.&&. laudit E.^. LmsAuditIdent E.==. luser E.^. LmsUserIdent + -- E.&&. laudit E.^. LmsAuditProcessed E.>=. E.val auditCutoff + -- ) pure (luser E.^. LmsUserIdent) let delusers = E.unValue <$> delusersVals numdel = length delusers @@ -167,7 +167,7 @@ dispatchJobLmsDequeue qid = JobHandlerAtomic act deleteWhere [LmsUserQualification ==. qid, LmsUserIdent <-. delusers] deleteWhere [LmsUserlistQualification ==. qid, LmsUserlistIdent <-. delusers] deleteWhere [LmsResultQualification ==. qid, LmsResultIdent <-. delusers] - deleteWhere [LmsAuditQualification ==. qid, LmsAuditIdent <-. delusers] + -- deleteWhere [LmsAuditQualification ==. qid, LmsAuditIdent <-. delusers] -- processes received results and lengthen qualifications, if applicable dispatchJobLmsResults :: QualificationId -> JobHandler UniWorX @@ -218,7 +218,14 @@ dispatchJobLmsResults qid = JobHandlerAtomic act $logErrorS "LmsResult" errmsg return $ Just errmsg - insert_ $ LmsAudit qid lmsUserIdent newStatus note lmsResultTimestamp now -- always log success, since this is only transmitted once + audit TransactionLmsSuccess -- always log success, since this is only transmitted once + { transactionQualification = qid + , transactionLmsIdent = lmsUserIdent + , transactionLmsDay = lmsResultSuccess + , transactionLmsUser = Just lmsUserUser + , transactionNote = note + , transactionReceived = lmsResultTimestamp + } delete lrid $logInfoS "LmsResult" [st|Processed #{tshow (length results)} LMS results|] @@ -260,7 +267,14 @@ dispatchJobLmsUserlist qid = JobHandlerAtomic act let blockedDay = utctDay lReceived newStatus = LmsBlocked blockedDay oldStatus = lmsUserStatus luser - insert_ $ LmsAudit qid (lmsUserIdent luser) newStatus (Just $ "Old Status was " <> tshow oldStatus) lReceived now + audit TransactionLmsBlocked + { transactionQualification = qid + , transactionLmsIdent = lmsUserIdent luser + , transactionLmsDay = blockedDay + , transactionLmsUser = Just $ lmsUserUser luser + , transactionNote = Just $ "Old status was " <> tshow oldStatus + , transactionReceived = lReceived + } update luid [LmsUserStatus =. (oldStatus <> Just newStatus)] updateBy (UniqueQualificationUser qid (lmsUserUser luser)) [QualificationUserBlockedDue =. Just (QualificationBlockedLms blockedDay)] queueDBJob JobSendNotification