From a60963000e725f1ed15fe1346ab4c5dc7113df52 Mon Sep 17 00:00:00 2001 From: Mirko Westermeier Date: Mon, 13 Nov 2023 12:15:59 +0100 Subject: [PATCH] WIP --- lib/LiBro/WebService.hs | 18 ++++++++++++++++++ lib/LiBro/WebService/API.hs | 4 +++- lib/LiBro/WebService/Server.hs | 12 +++++++++--- lib/LiBro/WebService/Types.hs | 7 +++++++ libro-backend.cabal | 3 +++ 5 files changed, 40 insertions(+), 4 deletions(-) create mode 100644 lib/LiBro/WebService.hs create mode 100644 lib/LiBro/WebService/Types.hs diff --git a/lib/LiBro/WebService.hs b/lib/LiBro/WebService.hs new file mode 100644 index 0000000..2bcb711 --- /dev/null +++ b/lib/LiBro/WebService.hs @@ -0,0 +1,18 @@ +module LiBro.WebService where + +import LiBro.Config +import LiBro.Control +import Control.Concurrent +import LiBro.Data (LiBroData) + +data LiBroState = LiBroState + { config :: Config + , mvBlocking :: MVar Blocking + , mvData :: MVar LiBroData + } + +lsConfig :: LiBroState -> IO Config +lsConfig = return . config + +lsData :: LiBroState -> IO LiBroData +lsData = readMVar . mvData diff --git a/lib/LiBro/WebService/API.hs b/lib/LiBro/WebService/API.hs index fdc9231..c48c203 100644 --- a/lib/LiBro/WebService/API.hs +++ b/lib/LiBro/WebService/API.hs @@ -1,9 +1,11 @@ module LiBro.WebService.API where +import LiBro.WebService.Types import Data.Proxy import Servant.API -type LiBroAPI = "hello" :> Get '[PlainText] String +type LiBroAPI = "hello" :> Get '[JSON] PersonIDs + :<|> "yay" :> Get '[PlainText] String libroApi :: Proxy LiBroAPI libroApi = Proxy diff --git a/lib/LiBro/WebService/Server.hs b/lib/LiBro/WebService/Server.hs index cb73d7e..2133713 100644 --- a/lib/LiBro/WebService/Server.hs +++ b/lib/LiBro/WebService/Server.hs @@ -1,10 +1,16 @@ module LiBro.WebService.Server where import LiBro.WebService.API +import LiBro.WebService.Types import Servant -server :: Server LiBroAPI -server = return "Hello LiBro!" +handleHello :: Handler PersonIDs +handleHello = return $ PersonIDs [17, 42] + +handleYay :: Handler String +handleYay = return "Yay!" libro :: Application -libro = serve libroApi server +libro = serve libroApi + $ handleHello + :<|> handleYay diff --git a/lib/LiBro/WebService/Types.hs b/lib/LiBro/WebService/Types.hs new file mode 100644 index 0000000..747fd79 --- /dev/null +++ b/lib/LiBro/WebService/Types.hs @@ -0,0 +1,7 @@ +module LiBro.WebService.Types where + +import Data.Aeson +import GHC.Generics + +newtype PersonIDs = PersonIDs {personIDs :: [Int]} deriving Generic +instance ToJSON PersonIDs diff --git a/libro-backend.cabal b/libro-backend.cabal index f43b992..235bfde 100644 --- a/libro-backend.cabal +++ b/libro-backend.cabal @@ -34,7 +34,9 @@ library , LiBro.Data.Storage , LiBro.Data.SafeText , LiBro.Control + , LiBro.WebService , LiBro.WebService.API + , LiBro.WebService.Types , LiBro.WebService.Server , LiBro.Util build-depends: base >=4.14.0.0 @@ -102,4 +104,5 @@ test-suite libro-backend-test , text , transformers , vector + , wai build-tool-depends: hspec-discover:hspec-discover