{-# LANGUAGE FlexibleInstances, TemplateHaskell, UndecidableInstances #-} module Control where --import HAppS import System.Random import System.Time import Data.Maybe import Types import HAppS.Store.FlashMsgs as FlashMsgs import HAppS.Store.HelpReqs as HelpReqs import HAppS.Server.State import HAppS.Data.Atom import MyEntries import State {-- there is a little boilerplate here because we dont' want Main to have direct access to state. but that is really up to you. --} -- $(FlashMsgs.controls) -- $(HelpReqs.controls) --this would be nicer if we used startState to randomize Id rather than default to 0 createEntry = do idNo <- return . abs =<< randomIO return $ gSet (Id idNo) (defaultValue::Entry) --createResponse eId = createEntry >>= -- (return . gSet (Just $ Refs eId)) mbGetEntry = query . MbGetEntry updateEntry entry = do TOD eTime _ <- getClockTime let entry' = gSet (Updated eTime) entry update $ UpdateEntry entry' return () --mbEntry <- query $ MbGetEntry eid -- prove it works --return $ fromJust mbEntry getRecentOf = query . GetRecentOf getRecent = query $ GetRecent getResponses = query . GetResponses updateOwnedEntry owner refs entry = do mbEntry <- query $ MbGetEntry $ gFind' entry if (isJust mbEntry) && (gFind mbEntry /= Just (owner::Owner)) then return Nothing else do let myEntry = MyEntry owner refs entry Control.updateEntry myEntry return $ Just entry --getOwner::Entry->Maybe Email --getOwner entry = gFind (gFind' entry::Author)