diff options
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 |