module Controller.Index ( getIndexAction , getUserName , signOutAction , getUsersAction , addUserAction , deleteUserAction ) where import Web.Scotty import Network.HTTP.Types.Status (ok200) import Database.Persist import Control.Monad.IO.Class (liftIO) import Data.Text (Text) import Data.String (fromString) import qualified LoginSession import qualified Secure import Model.Database import Model.User import Model.Json.Message import View.Page (page) getIndexAction :: ActionM () getIndexAction = html page getUserName :: ActionM () getUserName = Secure.loggedAction (\user -> do json . Message . userName . entityVal $ user ) signOutAction :: ActionM () signOutAction = do LoginSession.delete status ok200 getUsersAction :: ActionM () getUsersAction = do users <- liftIO $ runDb getUsers html . fromString . show $ users addUserAction :: Text -> Text -> ActionM () addUserAction email name = do _ <- liftIO . runDb $ createUser email name status ok200 deleteUserAction :: Text -> ActionM () deleteUserAction email = do _ <- liftIO . runDb $ deleteUser email status ok200