Organize application logic by core/feature breakouts, add dhall configuration support and add a range of new config options in the Reader, add example configuration/deployment files
This commit is contained in:
11
src/Core/Configuration.hs
Normal file
11
src/Core/Configuration.hs
Normal file
@ -0,0 +1,11 @@
|
||||
module Core.Configuration ( main ) where
|
||||
|
||||
import Core.Types
|
||||
|
||||
import Dhall
|
||||
|
||||
instance FromDhall DhallConfig
|
||||
|
||||
main :: IO DhallConfig
|
||||
main = do
|
||||
input auto "./config.dhall"
|
14
src/Core/HTTP.hs
Normal file
14
src/Core/HTTP.hs
Normal file
@ -0,0 +1,14 @@
|
||||
module Core.HTTP ( app ) where
|
||||
|
||||
import Core.Types
|
||||
|
||||
import Feature.Handlers as RES
|
||||
|
||||
import Network.Wai.Middleware.RequestLogger (logStdoutDev)
|
||||
import Web.Scotty.Trans
|
||||
|
||||
app :: PurrApp ()
|
||||
app = do
|
||||
middleware logStdoutDev
|
||||
|
||||
get "/" RES.root
|
20
src/Core/Mongo.hs
Normal file
20
src/Core/Mongo.hs
Normal file
@ -0,0 +1,20 @@
|
||||
module Core.Mongo ( mongoSetup, tempGetDocs ) where
|
||||
|
||||
import Core.Types
|
||||
|
||||
import Control.Monad.Reader (MonadIO)
|
||||
import Database.MongoDB
|
||||
import Prelude
|
||||
|
||||
mongoSetup :: DhallConfig -> IO MongoContext
|
||||
mongoSetup conf = do
|
||||
mongoCon <- connect $ host (hostname conf)
|
||||
let adminCon = MongoContext mongoCon master (adminDB conf)
|
||||
access (mongoPipe adminCon) (mongoAccessMode adminCon) (mongoDatabase adminCon) (auth (mongoUsername conf) (mongoPassword conf))
|
||||
return $ MongoContext mongoCon master (dataDB conf)
|
||||
|
||||
tempGetDocs :: MonadIO m => AppConfig -> m [Document]
|
||||
tempGetDocs appConfig = access (mongoPipe db) (mongoAccessMode db) (mongoDatabase db) $ find (select [] (collection conf)) >>= rest
|
||||
where
|
||||
db = dbconn appConfig
|
||||
conf = res appConfig
|
34
src/Core/Types.hs
Normal file
34
src/Core/Types.hs
Normal file
@ -0,0 +1,34 @@
|
||||
module Core.Types where
|
||||
|
||||
import qualified Data.Text.Lazy as LT
|
||||
|
||||
import Control.Monad.Reader (MonadIO, MonadReader, ReaderT)
|
||||
import Data.Text
|
||||
import Database.MongoDB (MongoContext)
|
||||
import GHC.Generics (Generic)
|
||||
import Numeric.Natural (Natural)
|
||||
import Web.Scotty.Trans (ScottyT, ActionT)
|
||||
|
||||
type PurrApp a = ScottyT LT.Text ConfigM a
|
||||
type PurrAction a = ActionT LT.Text ConfigM a
|
||||
|
||||
newtype ConfigM a = ConfigM
|
||||
{ runConfigM :: ReaderT AppConfig IO a
|
||||
} deriving (Applicative, Functor, Monad, MonadIO, MonadReader AppConfig)
|
||||
|
||||
data AppConfig = AppConfig
|
||||
{ res :: DhallConfig
|
||||
, dbconn :: MongoContext
|
||||
}
|
||||
|
||||
data DhallConfig = DhallConfig
|
||||
{ hostname :: String
|
||||
, port :: Int
|
||||
, environment :: Text
|
||||
, adminDB :: Text
|
||||
, dataDB :: Text
|
||||
, collection :: Text
|
||||
, mongoUsername :: Text
|
||||
, mongoPassword :: Text
|
||||
} deriving (Generic, Show)
|
||||
|
Reference in New Issue
Block a user