summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Dessaux2023-07-19 11:56:17 +0200
committerJulien Dessaux2023-07-19 11:56:17 +0200
commit15a7d5bef97557fc0f8a7b3fe4a68bf84a807daa (patch)
treedbc19fceb7b4b6d7e7961a784b9da027bb65ff3f
parent[haskell] Refactored everything with a ReaderT pattern (diff)
downloadspacetraders-15a7d5bef97557fc0f8a7b3fe4a68bf84a807daa.tar.gz
spacetraders-15a7d5bef97557fc0f8a7b3fe4a68bf84a807daa.tar.bz2
spacetraders-15a7d5bef97557fc0f8a7b3fe4a68bf84a807daa.zip
[haskell] refactoring
Diffstat (limited to '')
-rw-r--r--haskell/src/SpaceTraders/APIClient/Client.hs11
-rw-r--r--haskell/src/SpaceTraders/Database/Systems.hs4
-rw-r--r--haskell/src/SpaceTraders/Database/Utils.hs11
-rw-r--r--haskell/src/SpaceTraders/Utils.hs22
-rw-r--r--haskell/stack.yaml2
5 files changed, 26 insertions, 24 deletions
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.