From 31154b9430b0d2263cc57abc8783219c4d54f593 Mon Sep 17 00:00:00 2001 From: Steffen Jost Date: Tue, 8 Feb 2022 18:01:59 +0100 Subject: [PATCH] chore(lms): add required lenses for stub wip --- src/Application.hs | 2 +- src/Handler/Health.hs | 6 +++++- src/Handler/LMS.hs | 27 ++++++++++++++++----------- src/Utils/Lens.hs | 3 +++ 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/Application.hs b/src/Application.hs index 5f6ff7bc9..b8c636ef8 100644 --- a/src/Application.hs +++ b/src/Application.hs @@ -145,7 +145,7 @@ import Handler.Participants import Handler.StorageKey import Handler.Error import Handler.Upload - +import Handler.LMS -- This line actually creates our YesodDispatch instance. It is the second half -- of the call to mkYesodData which occurs in Foundation.hs. Please see the diff --git a/src/Handler/Health.hs b/src/Handler/Health.hs index cd1d6813e..531547ba6 100644 --- a/src/Handler/Health.hs +++ b/src/Handler/Health.hs @@ -2,6 +2,8 @@ module Handler.Health where import Import +import Handler.Utils + import qualified Data.Aeson.Encode.Pretty as Aeson import qualified Data.Text.Lazy.Builder as Builder @@ -104,6 +106,7 @@ getStatusR :: Handler Html getStatusR = do starttime <- getsYesod appStartTime currtime <- liftIO getCurrentTime + ft <- formatTime' "%Y%m%d %H:%M:%S" currtime -- use me throughout or delete me (delete, since this Handler is for mechanised tests only) withUrlRenderer [hamlet| $doctype 5 @@ -113,7 +116,8 @@ getStatusR = do

Current Time
- #{show currtime} + #{show currtime}
+ #{ft}

Instance Start
#{show starttime} diff --git a/src/Handler/LMS.hs b/src/Handler/LMS.hs index 2b021029b..3116976f7 100644 --- a/src/Handler/LMS.hs +++ b/src/Handler/LMS.hs @@ -42,30 +42,31 @@ resultLmsUser = _dbrOutput . _1 resultUser :: Lens' LmsUserTableData (Maybe (Entity User)) resultUser = _dbrOutput . _2 -csvLmsUserFilename :: IO Text +csvLmsUserFilename :: MonadHandler m => m Text csvLmsUserFilename = makeLmsFilename "user" -csvLmsUserlistFilename :: IO Text +csvLmsUserlistFilename :: MonadHandler m => m Text csvLmsUserlistFilename = makeLmsFilename "userliste" -csvLmsResultFilename :: IO Text +csvLmsResultFilename :: MonadHandler m => m Text csvLmsResultFilename = makeLmsFilename "ergebnisse" -- | Create filenames as specified by the LMS interface agreed with Know How AG -makeLmsFilename :: Text -> IO Text +makeLmsFilename :: MonadHandler m => Text -> m Text makeLmsFilename ftag = do ymth <- get_ymth return $ "fradrive_f_" <> ftag <> "_" <> ymth <> ".csv" -- | Return current datetime in YYYYMMDDHH format -get_ymth :: IO Text +get_ymth :: MonadHandler m => m Text get_ymth = do - now <- getCurrentTime - return $ formatTime "%Y%m%d%h" + now <- liftIO $ getCurrentTime + formatTime' "%Y%m%d%H" now getLmsR :: Handler Html getLmsR = do + dbtCsvName <- csvLmsUserFilename let dbtIdent = "lmsUsers" :: Text dbtStyle = def { dbsFilterLayout = defaultDBSFilterLayout } dbtSQLQuery = runReaderT $ do @@ -78,13 +79,17 @@ getLmsR = do 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)) + return ( lmsUser E.^. LmsUserIdent + , lmsUser E.^. LmsUserPin + , lmsUser E.^. LmsUserResetPin + , lmsUser E.^. LmsUserResetPin + -- , True) -- works, so we need a simple type here indeed + , isJust $ E.unValue (user E.?. UserCompanyPersonalNumber)) dbtColonnade = mempty --TODO dbtSorting = mempty dbtFilter = mempty dbtFilterUI = mempty - dbtParams = def - dbtCsvName = "lms.csv" + dbtParams = def -- TODO: wip, for reference, see e.g. Handler.Course.Users or Handler.Exam. dbtCsvEncode = do return $ DBTCsvEncode @@ -99,7 +104,7 @@ getLmsR = do mitarbeiter , dbtCsvName , dbtCsvNoExportData = Nothing - , dbtCsvHeader = Nothing -- return . Vector.filter csvColumns' . userTableCsvHeader showSex tutorials sheets . fromMaybe def + , dbtCsvHeader = def -- return . Vector.filter csvColumns' . userTableCsvHeader showSex tutorials sheets . fromMaybe def , dbtCsvExampleData = Nothing } -- TODO wip, for reference see e.g. Handler.Exam.Users diff --git a/src/Utils/Lens.hs b/src/Utils/Lens.hs index d21cd8f63..ce25d9f26 100644 --- a/src/Utils/Lens.hs +++ b/src/Utils/Lens.hs @@ -113,6 +113,9 @@ makeClassyFor_ ''StudyDegree makeClassyFor_ ''StudyTerms makeClassyFor_ ''StudySubTerms +makeClassyFor_ ''LmsUser +makeClassyFor_ ''LmsUserlist +makeClassyFor_ ''LmsResult _entityKey :: Getter (Entity record) (Key record) -- ^ Not a `Lens'` for safety