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 ()