Compare commits
No commits in common. "6763d3ffa1a5a6cfde30b8ea3967ad54d7e681fa" and "d389e78ddcc4234245df5b10949b63a40989a1fb" have entirely different histories.
6763d3ffa1
...
d389e78ddc
@ -8,4 +8,3 @@ Webserver that offers an HTML-only interface to Squeak.
|
|||||||
|
|
||||||
- Improve error handling: Write functions that turn `Maybe` and `Either` `SpockAction`s that return `4xx` or `5xx`.
|
- Improve error handling: Write functions that turn `Maybe` and `Either` `SpockAction`s that return `4xx` or `5xx`.
|
||||||
- Document JSON stuff
|
- Document JSON stuff
|
||||||
- Record times: How long did HTTP requests take?
|
|
||||||
|
15
src/Lisa.hs
15
src/Lisa.hs
@ -9,7 +9,7 @@ module Lisa
|
|||||||
import Control.Monad.IO.Class (MonadIO)
|
import Control.Monad.IO.Class (MonadIO)
|
||||||
import Data.Maybe (fromMaybe)
|
import Data.Maybe (fromMaybe)
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
import Network.HTTP.Types.Status (Status, badRequest400, internalServerError500)
|
import Network.HTTP.Types.Status (badRequest400)
|
||||||
import Text.Blaze.Html (Html)
|
import Text.Blaze.Html (Html)
|
||||||
import Text.Blaze.Html.Renderer.Utf8 (renderHtml)
|
import Text.Blaze.Html.Renderer.Utf8 (renderHtml)
|
||||||
import Web.Internal.HttpApiData (FromHttpApiData)
|
import Web.Internal.HttpApiData (FromHttpApiData)
|
||||||
@ -38,13 +38,6 @@ requiredParam k = param k >>= \case
|
|||||||
Just val ->
|
Just val ->
|
||||||
pure val
|
pure val
|
||||||
|
|
||||||
-- TODO: Generalize, introduce some sort of Lisa.Types.Error type
|
|
||||||
-- TODO: Make more readable
|
|
||||||
onLeft :: MonadIO m => (ActionCtxT ctx m (Either e a)) -> (Status, Text) -> ActionCtxT ctx m a
|
|
||||||
onLeft f (status, message) = f >>= (flip either pure $ \_ -> do
|
|
||||||
setStatus status
|
|
||||||
text message)
|
|
||||||
|
|
||||||
-- Exports
|
-- Exports
|
||||||
|
|
||||||
mkConfig :: IO (SpockCfg () Session State)
|
mkConfig :: IO (SpockCfg () Session State)
|
||||||
@ -58,9 +51,9 @@ app = do
|
|||||||
blaze Views.viewIndex
|
blaze Views.viewIndex
|
||||||
|
|
||||||
get ("lectures" <//> var) $ \lid -> do
|
get ("lectures" <//> var) $ \lid -> do
|
||||||
lecture <- getLectureByIdCached lid `onLeft` (internalServerError500, "Failed to retrieve lectures")
|
lecture <- getLectureByIdCached lid
|
||||||
documents <- Squeak.getDocumentsByLectureId lid `onLeft` (internalServerError500, "Failed to retrieve documents")
|
documents <- Squeak.getDocumentsByLectureId lid
|
||||||
blaze $ Views.viewLecture lecture documents
|
blaze $ either Views.viewSqueakError id $ Views.viewLecture <$> lecture <*> documents
|
||||||
|
|
||||||
get "lectures" $ do
|
get "lectures" $ do
|
||||||
query <- fromMaybe "" <$> param "query"
|
query <- fromMaybe "" <$> param "query"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user