{-|
Module : Resources.Metadata
Description :
Copyright : (c) Alexander Vieth, 2015
Licence : BSD3
Maintainer : aovieth@gmail.com
Stability : experimental
Portability : non-portable (GHC only)
-}
{-# LANGUAGE AutoDeriveTypeable #-}
module Resources.Metadata (
resource
) where
import Control.Monad.Trans.Class
import Control.Monad.Trans.Reader
import Control.Monad.Trans.Except
import Rest
import Rest.Resource as R
import Types.Server
import Types.GameState
import Types.GameId
import Types.Credentials
resource :: Resource (ReaderT GameId Server) (ReaderT GameId Server) () Void Void
resource = mkResourceId
{ R.name = "metadata"
, R.schema = singleton () $ unnamedSingle (const ())
, R.update = Just get
}
where
get :: Handler (ReaderT GameId Server)
get = secureHandler $ mkHandler (jsonO . jsonE . jsonI) handler
handler :: Env h p Credentials -> ExceptT (Reason Void) (ReaderT GameId Server) (Maybe GameMetadata)
handler env =
let credentials = input env
in lift ask >>= \gameId -> doGet credentials gameId
doGet
:: Credentials
-> GameId
-> ExceptT (Reason Void) (ReaderT GameId Server) (Maybe GameMetadata)
doGet credentials gameId = withUserCredentialsForGame credentials gameId (return . gameStateViewMetadata)