summaryrefslogtreecommitdiff
path: root/haskell/src/SpaceTraders/APIClient/Systems.hs
diff options
context:
space:
mode:
authorJulien Dessaux2023-07-11 21:55:55 +0200
committerJulien Dessaux2023-07-11 21:56:35 +0200
commit7bd1c116c26d0c2147aa787b04f6e7de85d44133 (patch)
tree8d831b852eeb37a2d8e4c09062c0ed7c9b441d19 /haskell/src/SpaceTraders/APIClient/Systems.hs
parent[haskell] Refactored JSON parsing code (diff)
downloadspacetraders-7bd1c116c26d0c2147aa787b04f6e7de85d44133.tar.gz
spacetraders-7bd1c116c26d0c2147aa787b04f6e7de85d44133.tar.bz2
spacetraders-7bd1c116c26d0c2147aa787b04f6e7de85d44133.zip
[haskell] Implemented pagination and systems list api call
Diffstat (limited to '')
-rw-r--r--haskell/src/SpaceTraders/APIClient/Systems.hs34
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