-- | Module contains data to cofigure database and REST service
module Model.Config where

-- import external modules
import              Web.Spock
import              Web.Spock.Config
import qualified    Data.Text as T
import              Database.Persist.Sqlite hiding (get)

-- | Spock state
data State
   = State
   { bs_cfg :: Config   -- ^ config object
   }

-- | config data contains port and dbname
data Config
   = Config
   { db_name   :: T.Text    -- ^ db name
   , app_port :: Int        -- ^ port default 8080
   }

-- | Spock session
type SessionVal = Maybe SessionId

-- | Spock api
type Api ctx = SpockCtxM ctx SqlBackend SessionVal State ()

-- | Spock API action
type ApiAction ctx a = SpockActionCtx ctx SqlBackend SessionVal State a

-- | DBAction
type DBAction ctx a = ActionCtxT ctx (WebStateM SqlBackend SessionVal State) a