asana-1.0.1.1: library/Asana/Api/Task/Search.hs
module Asana.Api.Task.Search
( SearchWorkspace (..),
TaskTypeFilter (..),
searchWorkspace,
)
where
import Asana.Api.Gid
import Asana.Api.Named
import Asana.Api.Prelude
import Asana.Api.Request
import Asana.Api.Task
import Data.HashMap.Strict (HashMap)
import qualified Data.HashMap.Strict as HashMap
import Data.List (intercalate)
import qualified Data.Text as T
data TaskTypeFilter = TasksOnly | SubtasksOnly | AllTaskTypes
data SearchWorkspace = SearchWorkspace
{ swWorkspaceId :: Gid,
swProjectIds :: [Gid],
swTaskStatusFilter :: TaskStatusFilter,
swCustomFields :: HashMap Gid Text,
swTaskTypeFilter :: TaskTypeFilter
}
-- | Search for tasks within a workspace
searchWorkspace ::
(MonadUnliftIO m, MonadLogger m, MonadReader env m, HasAsanaAccessKey env) =>
SearchWorkspace ->
m [Named]
searchWorkspace SearchWorkspace {..} =
getAllParams
(T.unpack $ "/workspaces/" <> gidToText swWorkspaceId <> "/tasks/search")
$ ( "projects.all",
intercalate "," $ map (T.unpack . gidToText) swProjectIds
)
: customFieldParams
<> completed
<> isSubtask
where
customFieldParams =
map
( \(a, b) ->
("custom_fields." <> T.unpack (gidToText a) <> ".value", T.unpack b)
)
$ HashMap.toList swCustomFields
completed = case swTaskStatusFilter of
AllTasks -> []
IncompletedTasks -> [("completed", "false")]
isSubtask = case swTaskTypeFilter of
AllTaskTypes -> []
TasksOnly -> [("is_subtask", "false")]
SubtasksOnly -> [("is_subtask", "true")]