From 15a7d5bef97557fc0f8a7b3fe4a68bf84a807daa Mon Sep 17 00:00:00 2001
From: Julien Dessaux <julien.dessaux@adyxax.org>
Date: Wed, 19 Jul 2023 11:56:17 +0200
Subject: [PATCH] [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

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.