factual-api-0.5.0: Data/Factual/Query/FacetsQuery.hs
-- | This module exports the types used to create facets queries.
module Data.Factual.Query.FacetsQuery
(
-- * FacetsQuery type
FacetsQuery(..)
-- * Required modules
, module Data.Factual.Shared.Table
, module Data.Factual.Shared.Search
, module Data.Factual.Shared.Filter
, module Data.Factual.Shared.Geo
) where
import Data.Factual.Query
import Data.Factual.Shared.Table
import Data.Factual.Shared.Search
import Data.Factual.Shared.Filter
import Data.Factual.Shared.Geo
import Data.Factual.Utils
import qualified Data.Map as M
-- | The FacetsQuery type is used to construct facets queries. A table and search
-- should be specified, but the rest of the query options are essentially
-- optional.
data FacetsQuery = FacetsQuery { table :: Table
, search :: Search
, select :: [String]
, filters :: [Filter]
, geo :: Maybe Geo
, limit :: Maybe Int
, minCount :: Maybe Int
, includeCount :: Bool
} deriving (Eq, Show)
-- The FacetsQuery type is a member of the Query typeclass so it can be used to
-- make a request.
instance Query FacetsQuery where
path query = (show $ table query) ++ "/facets"
params query = M.fromList [ searchPair $ search query
, selectPair $ select query
, filtersPair $ filters query
, geoPair $ geo query
, limitPair $ limit query
, minCountPair $ minCount query
, includeCountPair $ includeCount query ]
-- Helper functions
minCountPair :: Maybe Int -> (String, String)
minCountPair (Just x) = ("min_count", show x)
minCountPair Nothing = ("min_count", "")