diff options
author | Julien Dessaux | 2023-07-11 21:55:55 +0200 |
---|---|---|
committer | Julien Dessaux | 2023-07-11 21:56:35 +0200 |
commit | 7bd1c116c26d0c2147aa787b04f6e7de85d44133 (patch) | |
tree | 8d831b852eeb37a2d8e4c09062c0ed7c9b441d19 /haskell/src/SpaceTraders/APIClient/Systems.hs | |
parent | [haskell] Refactored JSON parsing code (diff) | |
download | spacetraders-7bd1c116c26d0c2147aa787b04f6e7de85d44133.tar.gz spacetraders-7bd1c116c26d0c2147aa787b04f6e7de85d44133.tar.bz2 spacetraders-7bd1c116c26d0c2147aa787b04f6e7de85d44133.zip |
[haskell] Implemented pagination and systems list api call
Diffstat (limited to 'haskell/src/SpaceTraders/APIClient/Systems.hs')
-rw-r--r-- | haskell/src/SpaceTraders/APIClient/Systems.hs | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/haskell/src/SpaceTraders/APIClient/Systems.hs b/haskell/src/SpaceTraders/APIClient/Systems.hs new file mode 100644 index 0000000..fca2037 --- /dev/null +++ b/haskell/src/SpaceTraders/APIClient/Systems.hs @@ -0,0 +1,34 @@ +{-# LANGUAGE DeriveAnyClass #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE OverloadedStrings #-} + +module SpaceTraders.APIClient.Systems + ( listSystems + ) where + +import Control.Exception +import qualified Data.Text as T +import qualified Database.SQLite.Simple as S +import Network.HTTP.Simple + +import SpaceTraders.APIClient.Client +import SpaceTraders.APIClient.Pagination +import SpaceTraders.Database.Systems +import SpaceTraders.Model.System(System) + +listSystems :: T.Text -> S.Connection -> IO (APIResponse [System]) +listSystems t conn = do + s <- getSystems conn + listSystems' Pagination{limit=20, page=((length s) `div` 20) + 1, total=0} + where + listSystems' :: Pagination -> IO (APIResponse [System]) + listSystems' p = do + resp <- sendPaginated $ setRequestPath "/v2/systems" + $ paginatedReq t (Just p) + case resp of + Left e -> throwIO e + Right (APIMessage [] _) -> Right <$> getSystems conn + Right (APIMessage r (Just p')) -> do + addSystems conn r + listSystems' (nextPage p') + _ -> undefined |