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)
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=|]