chore(lms): encode bool by 0 and 1 in lms csv export/import
This commit is contained in:
parent
c1d0f63620
commit
aa54bba62b
@ -22,13 +22,13 @@ import Database.Esqueleto.Utils.TH
|
|||||||
|
|
||||||
data LmsUserlistTableCsv = LmsUserlistTableCsv
|
data LmsUserlistTableCsv = LmsUserlistTableCsv
|
||||||
{ csvLULident :: LmsIdent
|
{ csvLULident :: LmsIdent
|
||||||
, csvLULfailed :: Bool
|
, csvLULfailed :: LmsBool
|
||||||
}
|
}
|
||||||
deriving Generic
|
deriving Generic
|
||||||
makeLenses_ ''LmsUserlistTableCsv
|
makeLenses_ ''LmsUserlistTableCsv
|
||||||
|
|
||||||
-- csv without headers -- TODO not yet supported
|
-- csv without headers -- TODO not yet supported
|
||||||
instance Csv.ToRecord LmsUserlistTableCsv
|
instance Csv.ToRecord LmsUserlistTableCsv
|
||||||
instance Csv.FromRecord LmsUserlistTableCsv
|
instance Csv.FromRecord LmsUserlistTableCsv
|
||||||
|
|
||||||
-- csv with headers
|
-- csv with headers
|
||||||
@ -121,7 +121,7 @@ mkUserlistTable sid qsh qid = do
|
|||||||
dbtCsvDoEncode = \() -> C.map (doEncode' . view _2)
|
dbtCsvDoEncode = \() -> C.map (doEncode' . view _2)
|
||||||
doEncode' = LmsUserlistTableCsv
|
doEncode' = LmsUserlistTableCsv
|
||||||
<$> view (_dbrOutput . _entityVal . _lmsUserlistIdent)
|
<$> view (_dbrOutput . _entityVal . _lmsUserlistIdent)
|
||||||
<*> view (_dbrOutput . _entityVal . _lmsUserlistFailed)
|
<*> view (_dbrOutput . _entityVal . _lmsUserlistFailed . _lmsBool)
|
||||||
dbtCsvDecode = Just DBTCsvDecode {..}
|
dbtCsvDecode = Just DBTCsvDecode {..}
|
||||||
where
|
where
|
||||||
dbtCsvRowKey = \LmsUserlistTableCsv{csvLULident} ->
|
dbtCsvRowKey = \LmsUserlistTableCsv{csvLULident} ->
|
||||||
@ -129,13 +129,13 @@ mkUserlistTable sid qsh qid = do
|
|||||||
dbtCsvComputeActions = \case -- shows a diff first
|
dbtCsvComputeActions = \case -- shows a diff first
|
||||||
DBCsvDiffNew{dbCsvNew} -> do
|
DBCsvDiffNew{dbCsvNew} -> do
|
||||||
yield $ LmsUserlistInsertData
|
yield $ LmsUserlistInsertData
|
||||||
{ lmsUserlistInsertIdent = csvLULident dbCsvNew
|
{ lmsUserlistInsertIdent = csvLULident dbCsvNew
|
||||||
, lmsUserlistInsertFailed = csvLULfailed dbCsvNew
|
, lmsUserlistInsertFailed = lms2bool $ csvLULfailed dbCsvNew
|
||||||
}
|
}
|
||||||
DBCsvDiffExisting{dbCsvNew = LmsUserlistTableCsv{..}} -> do
|
DBCsvDiffExisting{dbCsvNew = LmsUserlistTableCsv{..}} -> do
|
||||||
yield $ LmsUserlistUpdateData
|
yield $ LmsUserlistUpdateData
|
||||||
{ lmsUserlistInsertIdent = csvLULident
|
{ lmsUserlistInsertIdent = csvLULident
|
||||||
, lmsUserlistInsertFailed = csvLULfailed
|
, lmsUserlistInsertFailed = csvLULfailed & lms2bool
|
||||||
}
|
}
|
||||||
DBCsvDiffMissing{} -> return () -- no deletion
|
DBCsvDiffMissing{} -> return () -- no deletion
|
||||||
dbtCsvClassifyAction = \case
|
dbtCsvClassifyAction = \case
|
||||||
|
|||||||
@ -36,3 +36,28 @@ deriveJSON defaultOptions
|
|||||||
, sumEncoding = TaggedObject "lmsaudit" "lmsaction"
|
, sumEncoding = TaggedObject "lmsaudit" "lmsaction"
|
||||||
} ''LmsStatus
|
} ''LmsStatus
|
||||||
derivePersistFieldJSON ''LmsStatus
|
derivePersistFieldJSON ''LmsStatus
|
||||||
|
|
||||||
|
|
||||||
|
-- LMS Interface requires Bool to be encoded by 0 or 1 only
|
||||||
|
data LmsBool = LmsUnset | LmsSet
|
||||||
|
deriving (Eq, Ord, Read, Show, Generic, Typeable, NFData)
|
||||||
|
|
||||||
|
lms2bool :: LmsBool -> Bool
|
||||||
|
lms2bool LmsUnset = False
|
||||||
|
lms2bool LmsSet = True
|
||||||
|
bool2lms :: Bool -> LmsBool
|
||||||
|
bool2lms False = LmsUnset
|
||||||
|
bool2lms True = LmsSet
|
||||||
|
|
||||||
|
_lmsBool :: Iso' Bool LmsBool
|
||||||
|
_lmsBool = iso bool2lms lms2bool
|
||||||
|
|
||||||
|
instance Csv.ToField LmsBool where
|
||||||
|
toField LmsUnset = "0"
|
||||||
|
toField LmsSet = "1"
|
||||||
|
|
||||||
|
instance Csv.FromField LmsBool where
|
||||||
|
parseField i
|
||||||
|
| i == "0" = pure LmsUnset
|
||||||
|
| i == "1" = pure LmsSet
|
||||||
|
| otherwise = empty
|
||||||
|
|||||||
Reference in New Issue
Block a user