summaryrefslogtreecommitdiff
path: root/haskell/src/SpaceTraders/APIClient/Systems.hs
diff options
context:
space:
mode:
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