module FLM.Control where
import FLM.HAppS -- hiding (Updated, Id(..))
import Data.Maybe
import FLM.State as State
import FLM.Types
import FLM.WikiPages
import System.Time
import System.Random
stateFuns = State.stateFuns
createPage = do pid <- return . abs =<< randomIO
-- return $ gSet (Id pid) (defaultValue :: WikiPage)
return $ setId (Id pid) (defaultValue :: WikiPage)
-- replaces gSet (Id pid)
setId :: Id -> WikiPage -> WikiPage
setId newid (WPage a _ u pname ptext) = (WPage a newid u pname ptext)
-- replaces gSet (Updated integer)
setUpdated :: Updated -> WikiPage -> WikiPage
setUpdated newupdated (WPage a id _ pname ptext) = (WPage a id newupdated pname ptext)
addPage wikipage
= do let pid = gFind' wikipage
mbPage <- query $ MbGetPage pid
if isJust mbPage
then return Nothing
else do TOD eTime _ <- getClockTime
-- let entry' = gSet (Updated eTime) $ wikipage
let entry' = setUpdated (Updated eTime) wikipage
update $ AddPage entry'
return $ Just pid
updatePage :: Id -> WikiPage -> IO WikiPage
updatePage pid wikipage =
do
TOD eTime _ <- getClockTime
let wikipage' = setUpdated (Updated eTime) $ setId pid wikipage
update $ UpdatePage pid wikipage'
mbPage <- query $ MbGetPage pid -- prove it works
return $ fromJust mbPage
mbGetPage = query . MbGetPage
getList = query $ GetPages ()