HELPS/src/Main.hs

55 lines
1.4 KiB
Haskell
Raw Normal View History

2024-09-18 13:16:36 -05:00
module Main (main) where
import Core
import Database
import Handlers
2024-10-13 13:30:39 -05:00
import Logger
import Routes
2024-09-18 13:16:36 -05:00
import Control.Monad.Except (ExceptT (ExceptT))
2024-09-18 13:16:36 -05:00
import Data.List
import Effectful
import Effectful.Error.Static (Error, runErrorNoCallStack, throwError)
import Effectful.Reader.Static
import Network.Wai.Handler.Warp (run)
import Network.Wai.Middleware.Static ((>->), staticPolicy, noDots, addBase)
import Servant hiding ((:>), throwError, inject)
import qualified Servant as S
2024-09-18 13:16:36 -05:00
--
-- Application
--
2024-09-18 13:16:36 -05:00
main :: IO ()
main = do
pool <- createConnectionPool "host=localhost dbname=demo"
let env = AppEnv { pool = pool }
runAppEff env $ databaseInit
run port . middleware . serve proxy $ app env
2024-09-18 13:16:36 -05:00
app :: AppEnv -> Server AppAPI
app env = hoistServer proxy (Handler . ExceptT . runAppEff env) handlers
handlers :: ServerT AppAPI AppEff
handlers = rootHandler
:<|> userListHandler
:<|> userGetHandler
:<|> userPostHandler
:<|> userDeleteHandler
middleware :: Application -> Application
middleware = staticPolicy (noDots >-> addBase "data/assets/public")
runAppEff :: AppEnv -> AppEff a -> IO (Either ServerError a)
runAppEff env = runEff
. runErrorNoCallStack
. runReader env
. runDatabaseIO
. runLoggerPSQL
. inject
2024-09-18 13:16:36 -05:00
port :: Int
port = 8080
2024-10-12 18:08:29 -05:00
proxy :: Proxy AppAPI
2024-09-18 13:16:36 -05:00
proxy = Proxy