{-# LANGUAGE ImplicitParams #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ConstraintKinds #-} ------------------------------------------------------------------------------ -- | -- Module : QuickBooks.Item -- Description : -- Copyright : -- License : -- Maintainer : -- Stability : -- Portability : -- -- -- ------------------------------------------------------------------------------ module QuickBooks.Item ( queryItemRequest ) where import QuickBooks.Authentication import QuickBooks.Logging import QuickBooks.Types import qualified Data.Aeson as Aeson import Data.String.Interpolate (i) import Data.Text (Text) import Network.HTTP.Client import Network.HTTP.Types.Header (hAccept) -- GET /v3/company//query= queryItemRequest :: APIEnv => OAuthToken -> Text -> IO (Either String (QuickBooksResponse [Item])) queryItemRequest tok queryItemName = do let apiConfig = ?apiConfig let queryURI = parseUrl [i|#{queryURITemplate apiConfig}#{query}|] req <- oauthSignRequest tok =<< queryURI let oauthHeaders = requestHeaders req let req' = req { method = "GET" , requestHeaders = oauthHeaders ++ [(hAccept, "application/json")] } resp <- httpLbs req' ?manager logAPICall req' let eitherAllItems = Aeson.eitherDecode (responseBody resp) case eitherAllItems of Left er -> return (Left er) Right (QuickBooksItemResponse allItems) -> return $ Right $ QuickBooksItemResponse $ filter (\Item{..} -> itemName == queryItemName) allItems where query :: String query = "SELECT * FROM Item" queryURITemplate :: APIConfig -> String queryURITemplate APIConfig{..} = [i|https://#{hostname}/v3/company/#{companyId}/query?query=|]