chore(lms): work on lms handler stub

This commit is contained in:
Sarah Vaupel 2022-02-08 11:43:37 +01:00
parent 3eeac06c47
commit 417a48e7cb
2 changed files with 63 additions and 39 deletions

View File

@ -1,9 +1,16 @@
-- LMS Interface Tables, need regular processing by background jobs -- LMS Interface Tables, need regular processing by background jobs
--LmsUsers LmsUser
-- user UserId user UserId
-- ident LmsIdent ident LmsIdent
-- -- pin LmsPin -- pin must not be stored, is only sent once and can be recreated? qualification QualificationId
-- deriving Generic pin Text
resetPin Bool
delete Bool
deriving Generic
Qualification
name Text
deriving Generic
LmsUserlist LmsUserlist
ident LmsIdent ident LmsIdent

View File

@ -15,19 +15,28 @@ type LmsUserIdent = Text -- Unique random use-once identifier for each individua
data LmsUserTableCsv = LmsUserTableCsv -- Export only data LmsUserTableCsv = LmsUserTableCsv -- Export only
{ csvLmsUserIdent :: LmsUserIdent { csvLmsUserIdent :: LmsUserIdent
, csvLmsUserPin :: Text , csvLmsUserPin :: Text
, csvLmsUserReset, cvsLmsUserRemove, cvsLmsUserIntern :: Bool , csvLmsUserReset, cvsLmsUserRemove, cvsLmsUserIntern :: Int
} }
data LmsUserlistTableCsv = LmsUserlistTableCsv -- Import only, all users that are currently enlisted at the e-learning plattform type LmsUserTableExpr = E.SqlExpr (Entity LmsUser)
{ csvLmsUserlistIdent :: LmsUserIdent `E.LeftOuterJoin` E.SqlExpr (Entity User)
, csvLmsUserlistFailed :: Bool
} type LmsUserTableData = DBRow ( Entity LmsUser
, Maybe (Entity User)
)
queryLmsUser :: Getter LmsUserTableExpr (E.SqlExpr (Entity LmsUser))
queryLmsUser = to $(E.sqlLOJproj 2 1)
queryUser :: Getter LmsUserTableExpr (E.SqlExpr (Maybe (Entity User)))
queryUser = to $(E.sqlLOJproj 2 2)
resultLmsUser :: Lens' LmsUserTableData (Entity LmsUser)
resultLmsUser = _dbrOutput . _1
resultUser :: Lens' LmsUserTableData (Maybe (Entity User))
resultUser = _dbrOutput . _2
data LmsResultTableCsv = LmsResultTableCsv -- Import only, all users that succeeded are returned ONCE only; must then be deleted via LmsUserTableCsv Export!
{ csvLmsResultIdent :: LmsUserIdent
, csvLmsResultSuccess :: UTCTime -- datestamp user succeeded (might be local time, unclear)
}
csvLmsUserFilename :: IO Text csvLmsUserFilename :: IO Text
csvLmsUserFilename = makeLmsFilename "user" csvLmsUserFilename = makeLmsFilename "user"
@ -54,10 +63,17 @@ getLmsR :: Handler Html
getLmsR = do getLmsR = do
let dbtIdent = "lmsUsers" :: Text let dbtIdent = "lmsUsers" :: Text
dbtStyle = def { dbsFilterLayout = defaultDBSFilterLayout } dbtStyle = def { dbsFilterLayout = defaultDBSFilterLayout }
dbtSQLQuery q = error "TODO" dbtSQLQuery = runReaderT $ do
dbtRowKey = error "TODO" lmsUser <- view queryLmsUser
dbtProj = dbtProjSimple $ \(userIdent, userPin, doUserPinReset, doDeleteUser, isUserIntern) -> do user <- view queryUser
return ("abcdefgh", "12345678", False, False, True) -- Warum keine Liste? lift $ do
E.on $ E.just (lmsUser E.^. LmsUserUser) E.==. user E.?. UserId
-- TODO where?
return (lmsUser, user)
dbtRowKey = queryLmsUser >>> (E.^. LmsUserId)
dbtProj = dbtProjSimple $ \(lmsUser, user) -> do
-- return ("abcdefgh", "12345678", False, False, True)
return (lmsUser E.^. LmsUserIdent, lmsUser E.^. LmsUserPin, lmsUser E.^. LmsUserResetPin, lmsUser E.^. LmsUserResetPin, isJust (user E.?. UserCompanyPersonalNumber))
dbtColonnade = colChoices dbtColonnade = colChoices
dbtSorting = mempty dbtSorting = mempty
dbtFilter = mempty dbtFilter = mempty
@ -68,31 +84,32 @@ getLmsR = do
dbtCsvEncode = do dbtCsvEncode = do
return $ DBTCsvEncode return $ DBTCsvEncode
{ dbtCsvExportForm = def { dbtCsvExportForm = def
, dbtCsvDoEncode = \UserCsvExportData{} -> C.mapM $ \(_, row) -> flip runReaderT row $ , dbtCsvDoEncode = \LmsCsvExportData{} -> C.mapM $ \(_lmsUserTableId, row) -> do
LmsTableCsv -- <- for each desired column one view mitarbeiter <- return 1
<$> _t1 return $ LmsUserTableCsv
<*> _t2 (row ^. resultUser . _entityVal . _lmsUserIdent)
<*> _t3 (row ^. resultUser . _entityVal . _lmsUserPin)
<*> _t4 (row ^. resultUser . _entityVal . _lmsUserResetPin . to fromEnum)
<*> _t5 (row ^. resultUser . _entityVal . _lmsUserDelete . to fromEnum)
mitarbeiter
, dbtCsvName , dbtCsvName
, dbtCsvSheetName , dbtCsvSheetName
, dbtCsvNoExportData = Nothing -- ? , dbtCsvNoExportData = Nothing
, dbtCsvHeader = return . Vector.filter csvColumns' . userTableCsvHeader showSex tutorials sheets . fromMaybe def , dbtCsvHeader = Nothing -- return . Vector.filter csvColumns' . userTableCsvHeader showSex tutorials sheets . fromMaybe def
, dbtCsvExampleData = Nothing , dbtCsvExampleData = Nothing
} }
-- TODO wip, for reference see e.g. Handler.Exam.Users -- TODO wip, for reference see e.g. Handler.Exam.Users
dbtCsvDecode = Just DBTCsvDecode dbtCsvDecode = Nothing -- Just DBTCsvDecode
{ dbtCsvRowKey = _1 -- { dbtCsvRowKey = _1
, dbtCsvComputeActions = _2 -- , dbtCsvComputeActions = _2
, dbtCsvClassifyAction = _3 -- , dbtCsvClassifyAction = _3
, dbtCsvCoarsenActionClass = _4 -- , dbtCsvCoarsenActionClass = _4
, dbtCsvValidateActions = _5 -- , dbtCsvValidateActions = _5
, dbtCsvExecuteActions = _6 -- <- actions based on sent data here -- , dbtCsvExecuteActions = _6 -- <- actions based on sent data here
, dbtCsvRenderKey = _7 -- , dbtCsvRenderKey = _7
, dbtCsvRenderActionClass = _8 -- , dbtCsvRenderActionClass = _8
, dbtCsvRenderException = _9 -- , dbtCsvRenderException = _9
} -- }
dbTable psValidator DBTable{..} dbTable psValidator DBTable{..}
heading = [whamlet|LMS|] heading = [whamlet|LMS|]
siteLayout heading $ do siteLayout heading $ do