From 7bd1c116c26d0c2147aa787b04f6e7de85d44133 Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Tue, 11 Jul 2023 21:55:55 +0200 Subject: [haskell] Implemented pagination and systems list api call --- haskell/src/SpaceTraders/APIClient/Systems.hs | 34 +++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 haskell/src/SpaceTraders/APIClient/Systems.hs (limited to 'haskell/src/SpaceTraders/APIClient/Systems.hs') 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 -- cgit v1.2.3