{-# LANGUAGE OverloadedStrings #-} module Network.Pagarme (baseUrl , withApiKey , getTransactions , byPage , byConfirmedStatus , byStatus ) where import qualified Data.ByteString.Lazy as BS import Network.Wreq import Control.Lens import qualified Data.Text as T import Data.Map as Map import Data.Aeson (Value) import qualified Data.Aeson.Types as A type SingleResult = Response A.Object type ResultSet = Response [A.Object] baseUrl :: String baseUrl = "https://api.pagar.me/1/" getJSON :: A.FromJSON a => Options -> String -> IO (Response a) getJSON requestOptions path = asJSON =<< getWith requestOptions (baseUrl ++ path) toText :: Show a => a -> T.Text toText = T.pack . show getOne requestOptions path = do r <- getJSON requestOptions path :: IO SingleResult return $ r ^. responseBody getAll requestOptions path = do r <- getJSON requestOptions path :: IO ResultSet return $ r ^. responseBody byPage pageNumber requestOptions = requestOptions & param "page" .~ [toText pageNumber] & param "count" .~ ["100"] byStatus status requestOptions = requestOptions & param "status" .~ [status] byConfirmedStatus = byStatus "paid" withApiKey key requestOptions = requestOptions & param "api_key" .~ [key] getTransactions requestOptions = getAll requestOptions "transactions"