Support for Lucid HTML, add static file middleware
This commit is contained in:
@@ -3,26 +3,35 @@ module Handlers where
|
||||
import Core
|
||||
import Database
|
||||
import Logger
|
||||
import Views as V
|
||||
|
||||
import qualified Data.ByteString.Char8 as C
|
||||
import Data.List
|
||||
import qualified Data.Text as T
|
||||
import Effectful
|
||||
import Effectful.Error.Static (Error, throwError)
|
||||
import Lucid (Html)
|
||||
import Servant hiding ((:>), throwError)
|
||||
import qualified Servant as S
|
||||
import Servant.HTML.Lucid
|
||||
|
||||
-- Type synonym for common CRUD constraints like interacting with a database,
|
||||
-- logging, and the possibility to throw an error.
|
||||
type CRUD es = ( Database :> es, Logger :> es, Error ServerError :> es )
|
||||
|
||||
rootHandler :: (Logger :> es, Error ServerError :> es)
|
||||
=> Eff es T.Text
|
||||
rootHandler = (writeLog Info "Hit the root!") >>= \_ ->
|
||||
return "Hello, World!"
|
||||
-- Remember to drop effect constraints you don't need!
|
||||
rootHandler :: (Logger :> es, Error ServerError :> es)
|
||||
=> Eff es (Html ())
|
||||
rootHandler = (writeLog Info "Hit the root!")
|
||||
>>= \_ -> return V.root
|
||||
|
||||
userListHandler :: CRUD es
|
||||
=> Eff es [User]
|
||||
userListHandler = (writeLog Info "Selected all users!") >>= \_ ->
|
||||
databaseRead_ "SELECT id, name FROM users"
|
||||
=> Eff es (Html ())
|
||||
userListHandler = do
|
||||
writeLog Info "Selected all users!"
|
||||
users <- databaseRead_ "SELECT id, name FROM users"
|
||||
return $ V.baseDoc $ case users of
|
||||
[] -> warning "No users found"
|
||||
_ -> foldMap userHtml users
|
||||
|
||||
userGetHandler :: CRUD es
|
||||
=> UserId -> Eff es User
|
||||
|
||||
Reference in New Issue
Block a user