From 15a7d5bef97557fc0f8a7b3fe4a68bf84a807daa Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Wed, 19 Jul 2023 11:56:17 +0200 Subject: [haskell] refactoring --- haskell/src/SpaceTraders/APIClient/Client.hs | 11 +---------- haskell/src/SpaceTraders/Database/Systems.hs | 4 ++-- haskell/src/SpaceTraders/Database/Utils.hs | 11 ----------- haskell/src/SpaceTraders/Utils.hs | 22 ++++++++++++++++++++++ haskell/stack.yaml | 2 +- 5 files changed, 26 insertions(+), 24 deletions(-) delete mode 100644 haskell/src/SpaceTraders/Database/Utils.hs create mode 100644 haskell/src/SpaceTraders/Utils.hs (limited to 'haskell') diff --git a/haskell/src/SpaceTraders/APIClient/Client.hs b/haskell/src/SpaceTraders/APIClient/Client.hs index 402431f..c7b58e0 100644 --- a/haskell/src/SpaceTraders/APIClient/Client.hs +++ b/haskell/src/SpaceTraders/APIClient/Client.hs @@ -7,7 +7,6 @@ module SpaceTraders.APIClient.Client , APIPaginatedResponse , APIResponse , defaultReq - , fromJSONValue , send , sendPaginated , tokenReq @@ -16,9 +15,6 @@ module SpaceTraders.APIClient.Client import Control.Concurrent import Control.Monad.Reader import Data.Aeson -import Data.Aeson.Types -import qualified Data.ByteString as B -import qualified Data.ByteString.Internal as B import qualified Data.Text as T import qualified Data.Text.Encoding as T import Network.HTTP.Simple @@ -27,6 +23,7 @@ import Network.HTTP.Types.Status import SpaceTraders import SpaceTraders.APIClient.Errors import SpaceTraders.APIClient.Pagination +import SpaceTraders.Utils data FromJSON a => APIMessage a = APIMessage { messageData :: a , messagePagination :: Maybe Pagination @@ -49,12 +46,6 @@ defaultReq = setRequestHost "api.spacetraders.io" tokenReq :: T.Text -> Request tokenReq token = setRequestHeader "Authorization" [T.encodeUtf8 $ "Bearer " <> token] defaultReq -fromJSONValue :: FromJSON a => Value -> Either String a -fromJSONValue = parseEither parseJSON - -int2ByteString :: Int -> B.ByteString -int2ByteString = B.pack . map B.c2w . show - send :: (FromJSON a, HasRequest env, MonadIO m, MonadReader env m) => (Request -> Request) -> m (APIResponse a) send requestBuilder = do response <- sendPaginated Nothing requestBuilder diff --git a/haskell/src/SpaceTraders/Database/Systems.hs b/haskell/src/SpaceTraders/Database/Systems.hs index f71508e..d3d19c7 100644 --- a/haskell/src/SpaceTraders/Database/Systems.hs +++ b/haskell/src/SpaceTraders/Database/Systems.hs @@ -11,8 +11,8 @@ import Data.Maybe import qualified Database.SQLite.Simple as S import SpaceTraders -import SpaceTraders.Database.Utils import SpaceTraders.Model.System +import SpaceTraders.Utils addSystems :: (HasDatabaseConn env, MonadIO m, MonadReader env m) => [System] -> m () addSystems systems = do @@ -23,5 +23,5 @@ addSystems systems = do getSystems :: (HasDatabaseConn env, MonadIO m, MonadReader env m) => m [System] getSystems = do env <- ask - ret <- liftIO $ S.query_ (getConn env) "SELECT data from systems;" + ret <- liftIO $ S.query_ (getConn env) "SELECT data FROM systems;" return . catMaybes $ map (decodeText . head) ret diff --git a/haskell/src/SpaceTraders/Database/Utils.hs b/haskell/src/SpaceTraders/Database/Utils.hs deleted file mode 100644 index 4d933bd..0000000 --- a/haskell/src/SpaceTraders/Database/Utils.hs +++ /dev/null @@ -1,11 +0,0 @@ -module SpaceTraders.Database.Utils - ( decodeText - ) where - -import Data.Aeson -import Data.ByteString.Builder(toLazyByteString) -import qualified Data.Text as T -import Data.Text.Encoding (encodeUtf8Builder) - -decodeText :: FromJSON a => T.Text -> Maybe a -decodeText = decode . toLazyByteString . encodeUtf8Builder diff --git a/haskell/src/SpaceTraders/Utils.hs b/haskell/src/SpaceTraders/Utils.hs new file mode 100644 index 0000000..12bfd6a --- /dev/null +++ b/haskell/src/SpaceTraders/Utils.hs @@ -0,0 +1,22 @@ +module SpaceTraders.Utils + ( decodeText + , fromJSONValue + , int2ByteString + ) where + +import Data.Aeson +import Data.Aeson.Types +import qualified Data.ByteString as B +import qualified Data.ByteString.Builder as B +import qualified Data.ByteString.Internal as B +import qualified Data.Text as T +import qualified Data.Text.Encoding as T + +decodeText :: FromJSON a => T.Text -> Maybe a +decodeText = decode . B.toLazyByteString . T.encodeUtf8Builder + +fromJSONValue :: FromJSON a => Value -> Either String a +fromJSONValue = parseEither parseJSON + +int2ByteString :: Int -> B.ByteString +int2ByteString = B.pack . map B.c2w . show diff --git a/haskell/stack.yaml b/haskell/stack.yaml index d84c077..c166887 100644 --- a/haskell/stack.yaml +++ b/haskell/stack.yaml @@ -18,7 +18,7 @@ # resolver: ./custom-snapshot.yaml # resolver: https://example.com/snapshots/2018-01-01.yaml resolver: - url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/21/0.yaml + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/21/3.yaml # User packages to be built. # Various formats can be used as shown in the example below. -- cgit v1.2.3