{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TemplateHaskell #-}
module GitLab.API.Issues
(
groupIssues,
projectIssues,
issue,
userIssues,
projectIssue,
newIssue,
newIssue',
editIssue,
deleteIssue,
reorderIssue,
moveIssue,
cloneIssue,
subscribeIssue,
unsubscribeIssue,
createTodo,
issueMergeRequests,
issueMergeRequestsThatClose,
issueParticipants,
issueStatisticsUser,
issueStatisticsGroup,
issueStatisticsProject,
defaultIssueFilters,
defaultIssueAttrs,
IssueAttrs (..),
DueDate (..),
IssueState (..),
)
where
import Data.Aeson.TH
import qualified Data.ByteString.Lazy as BSL
import Data.Either
import Data.Maybe
import Data.Text (Text)
import qualified Data.Text as T
import qualified Data.Text.Encoding as T
import Data.Time.Clock
import Data.Time.Format.ISO8601
import GitLab.Types
import GitLab.WebRequests.GitLabWebCalls
import Network.HTTP.Client
groupIssues ::
Group ->
IssueFilterAttrs ->
GitLab [Issue]
groupIssues :: Group -> IssueFilterAttrs -> GitLab [Issue]
groupIssues Group
grp IssueFilterAttrs
attrs = do
Either (Response ByteString) [Issue]
result <- Text
-> [GitLabParam] -> GitLab (Either (Response ByteString) [Issue])
forall a.
FromJSON a =>
Text -> [GitLabParam] -> GitLab (Either (Response ByteString) [a])
gitlabGetMany Text
urlPath (IssueFilterAttrs -> [GitLabParam]
issueFilters IssueFilterAttrs
attrs)
[Issue] -> GitLab [Issue]
forall a. a -> GitLabT IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ([Issue] -> Either (Response ByteString) [Issue] -> [Issue]
forall b a. b -> Either a b -> b
fromRight (String -> [Issue]
forall a. HasCallStack => String -> a
error String
"groupsIssues error") Either (Response ByteString) [Issue]
result)
where
urlPath :: Text
urlPath =
String -> Text
T.pack (String -> Text) -> String -> Text
forall a b. (a -> b) -> a -> b
$
String
"/groups/"
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Int -> String
forall a. Show a => a -> String
show (Group -> Int
group_id Group
grp)
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"/issues"
projectIssues ::
Project ->
IssueFilterAttrs ->
GitLab [Issue]
projectIssues :: Project -> IssueFilterAttrs -> GitLab [Issue]
projectIssues Project
p IssueFilterAttrs
filters = do
Either (Response ByteString) [Issue]
result <- Int
-> IssueFilterAttrs
-> GitLab (Either (Response ByteString) [Issue])
projectIssues' (Project -> Int
project_id Project
p) IssueFilterAttrs
filters
[Issue] -> GitLab [Issue]
forall a. a -> GitLabT IO a
forall (m :: * -> *) a. Monad m => a -> m a
return ([Issue] -> Either (Response ByteString) [Issue] -> [Issue]
forall b a. b -> Either a b -> b
fromRight (String -> [Issue]
forall a. HasCallStack => String -> a
error String
"projectIssues error") Either (Response ByteString) [Issue]
result)
projectIssues' ::
Int ->
IssueFilterAttrs ->
GitLab (Either (Response BSL.ByteString) [Issue])
projectIssues' :: Int
-> IssueFilterAttrs
-> GitLab (Either (Response ByteString) [Issue])
projectIssues' Int
projectId IssueFilterAttrs
attrs =
Text
-> [GitLabParam] -> GitLab (Either (Response ByteString) [Issue])
forall a.
FromJSON a =>
Text -> [GitLabParam] -> GitLab (Either (Response ByteString) [a])
gitlabGetMany Text
urlPath (IssueFilterAttrs -> [GitLabParam]
issueFilters IssueFilterAttrs
attrs)
where
urlPath :: Text
urlPath =
String -> Text
T.pack (String -> Text) -> String -> Text
forall a b. (a -> b) -> a -> b
$
String
"/projects/"
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Int -> String
forall a. Show a => a -> String
show Int
projectId
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"/issues"
issue ::
Int ->
GitLab (Either (Response BSL.ByteString) (Maybe Issue))
issue :: Int -> GitLab (Either (Response ByteString) (Maybe Issue))
issue Int
issId =
Text
-> [GitLabParam]
-> GitLab (Either (Response ByteString) (Maybe Issue))
forall a.
FromJSON a =>
Text
-> [GitLabParam] -> GitLab (Either (Response ByteString) (Maybe a))
gitlabGetOne Text
urlPath []
where
urlPath :: Text
urlPath =
String -> Text
T.pack
String
"/issues/"
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
issId)
userIssues ::
User ->
GitLab [Issue]
userIssues :: User -> GitLab [Issue]
userIssues User
usr =
[Issue] -> Either (Response ByteString) [Issue] -> [Issue]
forall b a. b -> Either a b -> b
fromRight (String -> [Issue]
forall a. HasCallStack => String -> a
error String
"userIssues error") (Either (Response ByteString) [Issue] -> [Issue])
-> GitLab (Either (Response ByteString) [Issue]) -> GitLab [Issue]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Text
-> [GitLabParam] -> GitLab (Either (Response ByteString) [Issue])
forall a.
FromJSON a =>
Text -> [GitLabParam] -> GitLab (Either (Response ByteString) [a])
gitlabGetMany Text
addr [GitLabParam]
params
where
addr :: Text
addr = Text
"/issues"
params :: [GitLabParam]
params :: [GitLabParam]
params =
[ (ByteString
"author_id", ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (Text -> ByteString
T.encodeUtf8 (String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show (User -> Int
user_id User
usr))))),
(ByteString
"scope", ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just ByteString
"all")
]
projectIssue ::
Project ->
Int ->
GitLab (Either (Response BSL.ByteString) (Maybe Issue))
projectIssue :: Project
-> Int -> GitLab (Either (Response ByteString) (Maybe Issue))
projectIssue Project
p Int
issId =
Text
-> [GitLabParam]
-> GitLab (Either (Response ByteString) (Maybe Issue))
forall a.
FromJSON a =>
Text
-> [GitLabParam] -> GitLab (Either (Response ByteString) (Maybe a))
gitlabGetOne Text
urlPath []
where
urlPath :: Text
urlPath =
String -> Text
T.pack
String
"/projects/"
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show (Project -> Int
project_id Project
p))
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"/issues/"
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
issId)
newIssue ::
Project ->
Text ->
Text ->
IssueAttrs ->
GitLab (Either (Response BSL.ByteString) (Maybe Issue))
newIssue :: Project
-> Text
-> Text
-> IssueAttrs
-> GitLab (Either (Response ByteString) (Maybe Issue))
newIssue Project
project =
Int
-> Text
-> Text
-> IssueAttrs
-> GitLab (Either (Response ByteString) (Maybe Issue))
newIssue' (Project -> Int
project_id Project
project)
newIssue' ::
Int ->
Text ->
Text ->
IssueAttrs ->
GitLab (Either (Response BSL.ByteString) (Maybe Issue))
newIssue' :: Int
-> Text
-> Text
-> IssueAttrs
-> GitLab (Either (Response ByteString) (Maybe Issue))
newIssue' Int
projectId Text
issueTitle Text
issueDescription IssueAttrs
attrs =
Text
-> [GitLabParam]
-> GitLab (Either (Response ByteString) (Maybe Issue))
forall a.
FromJSON a =>
Text
-> [GitLabParam] -> GitLab (Either (Response ByteString) (Maybe a))
gitlabPost Text
addr [GitLabParam]
dataBody
where
dataBody :: [GitLabParam]
dataBody :: [GitLabParam]
dataBody =
[ (ByteString
"title", ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (Text -> ByteString
T.encodeUtf8 Text
issueTitle)),
(ByteString
"description", ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (Text -> ByteString
T.encodeUtf8 Text
issueDescription))
]
[GitLabParam] -> [GitLabParam] -> [GitLabParam]
forall a. Semigroup a => a -> a -> a
<> Int -> IssueAttrs -> [GitLabParam]
issueAttrs Int
projectId IssueAttrs
attrs
addr :: Text
addr =
Text
"/projects/"
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
projectId)
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"/issues"
editIssue ::
Project ->
IssueId ->
IssueAttrs ->
GitLab (Either (Response BSL.ByteString) Issue)
editIssue :: Project
-> Int -> IssueAttrs -> GitLab (Either (Response ByteString) Issue)
editIssue Project
prj Int
issueId IssueAttrs
editIssueReq = do
let urlPath :: Text
urlPath =
Text
"/projects/"
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show (Project -> Int
project_id Project
prj))
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"/issues/"
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
issueId)
Either (Response ByteString) (Maybe Issue)
result <-
Text
-> [GitLabParam]
-> GitLab (Either (Response ByteString) (Maybe Issue))
forall a.
FromJSON a =>
Text
-> [GitLabParam] -> GitLab (Either (Response ByteString) (Maybe a))
gitlabPut
Text
urlPath
(Int -> IssueAttrs -> [GitLabParam]
issueAttrs (Project -> Int
project_id Project
prj) IssueAttrs
editIssueReq)
case Either (Response ByteString) (Maybe Issue)
result of
Left Response ByteString
resp -> Either (Response ByteString) Issue
-> GitLab (Either (Response ByteString) Issue)
forall a. a -> GitLabT IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Response ByteString -> Either (Response ByteString) Issue
forall a b. a -> Either a b
Left Response ByteString
resp)
Right Maybe Issue
Nothing -> String -> GitLab (Either (Response ByteString) Issue)
forall a. HasCallStack => String -> a
error String
"editIssue error"
Right (Just Issue
iss) -> Either (Response ByteString) Issue
-> GitLab (Either (Response ByteString) Issue)
forall a. a -> GitLabT IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Issue -> Either (Response ByteString) Issue
forall a b. b -> Either a b
Right Issue
iss)
deleteIssue ::
Project ->
IssueId ->
GitLab (Either (Response BSL.ByteString) (Maybe ()))
deleteIssue :: Project -> Int -> GitLab (Either (Response ByteString) (Maybe ()))
deleteIssue Project
prj Int
issueId = do
Text
-> [GitLabParam]
-> GitLab (Either (Response ByteString) (Maybe ()))
forall a.
FromJSON a =>
Text
-> [GitLabParam] -> GitLab (Either (Response ByteString) (Maybe a))
gitlabDelete Text
issueAddr []
where
issueAddr :: Text
issueAddr :: Text
issueAddr =
Text
"/projects/"
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show (Project -> Int
project_id Project
prj))
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"/issues/"
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
issueId)
reorderIssue ::
Project ->
IssueId ->
Int ->
Int ->
GitLab (Either (Response BSL.ByteString) Issue)
reorderIssue :: Project
-> Int -> Int -> Int -> GitLab (Either (Response ByteString) Issue)
reorderIssue Project
prj Int
issueId Int
moveAfterId Int
moveBeforeId = do
let urlPath :: Text
urlPath =
Text
"/projects/"
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show (Project -> Int
project_id Project
prj))
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"/issues/"
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
issueId)
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"/reorder"
Either (Response ByteString) (Maybe Issue)
result <-
Text
-> [GitLabParam]
-> GitLab (Either (Response ByteString) (Maybe Issue))
forall a.
FromJSON a =>
Text
-> [GitLabParam] -> GitLab (Either (Response ByteString) (Maybe a))
gitlabPut
Text
urlPath
[ (ByteString
"move_after_id", ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (Text -> ByteString
T.encodeUtf8 (String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
moveAfterId)))),
(ByteString
"move_before_id", ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (Text -> ByteString
T.encodeUtf8 (String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
moveBeforeId))))
]
case Either (Response ByteString) (Maybe Issue)
result of
Left Response ByteString
resp -> Either (Response ByteString) Issue
-> GitLab (Either (Response ByteString) Issue)
forall a. a -> GitLabT IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Response ByteString -> Either (Response ByteString) Issue
forall a b. a -> Either a b
Left Response ByteString
resp)
Right Maybe Issue
Nothing -> String -> GitLab (Either (Response ByteString) Issue)
forall a. HasCallStack => String -> a
error String
"reorderIssue error"
Right (Just Issue
iss) -> Either (Response ByteString) Issue
-> GitLab (Either (Response ByteString) Issue)
forall a. a -> GitLabT IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (Issue -> Either (Response ByteString) Issue
forall a b. b -> Either a b
Right Issue
iss)
moveIssue ::
Project ->
IssueId ->
ProjectId ->
GitLab (Either (Response BSL.ByteString) (Maybe Issue))
moveIssue :: Project
-> Int
-> Int
-> GitLab (Either (Response ByteString) (Maybe Issue))
moveIssue Project
prj Int
issueId Int
toPrjId =
Text
-> [GitLabParam]
-> GitLab (Either (Response ByteString) (Maybe Issue))
forall a.
FromJSON a =>
Text
-> [GitLabParam] -> GitLab (Either (Response ByteString) (Maybe a))
gitlabPost Text
addr [GitLabParam]
dataBody
where
dataBody :: [GitLabParam]
dataBody :: [GitLabParam]
dataBody =
[ (ByteString
"to_project_id", ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (Text -> ByteString
T.encodeUtf8 (String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
toPrjId))))
]
addr :: Text
addr =
Text
"/projects/"
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show (Project -> Int
project_id Project
prj))
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"/issues/"
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
issueId)
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"/move"
cloneIssue ::
Project ->
IssueId ->
ProjectId ->
GitLab (Either (Response BSL.ByteString) (Maybe Issue))
cloneIssue :: Project
-> Int
-> Int
-> GitLab (Either (Response ByteString) (Maybe Issue))
cloneIssue Project
prj Int
issueId Int
toPrjId =
Text
-> [GitLabParam]
-> GitLab (Either (Response ByteString) (Maybe Issue))
forall a.
FromJSON a =>
Text
-> [GitLabParam] -> GitLab (Either (Response ByteString) (Maybe a))
gitlabPost Text
addr [GitLabParam]
dataBody
where
dataBody :: [GitLabParam]
dataBody :: [GitLabParam]
dataBody =
[ (ByteString
"to_project_id", ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (Text -> ByteString
T.encodeUtf8 (String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
toPrjId))))
]
addr :: Text
addr =
Text
"/projects/"
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show (Project -> Int
project_id Project
prj))
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"/issues/"
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
issueId)
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"/clone"
subscribeIssue ::
Project ->
IssueId ->
GitLab (Either (Response BSL.ByteString) (Maybe Issue))
subscribeIssue :: Project
-> Int -> GitLab (Either (Response ByteString) (Maybe Issue))
subscribeIssue Project
prj Int
issueId =
Text
-> [GitLabParam]
-> GitLab (Either (Response ByteString) (Maybe Issue))
forall a.
FromJSON a =>
Text
-> [GitLabParam] -> GitLab (Either (Response ByteString) (Maybe a))
gitlabPost Text
addr [GitLabParam]
dataBody
where
dataBody :: [GitLabParam]
dataBody :: [GitLabParam]
dataBody =
[]
addr :: Text
addr =
Text
"/projects/"
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show (Project -> Int
project_id Project
prj))
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"/issues/"
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
issueId)
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"/subscribe"
unsubscribeIssue ::
Project ->
IssueId ->
GitLab (Either (Response BSL.ByteString) (Maybe Issue))
unsubscribeIssue :: Project
-> Int -> GitLab (Either (Response ByteString) (Maybe Issue))
unsubscribeIssue Project
prj Int
issueId =
Text
-> [GitLabParam]
-> GitLab (Either (Response ByteString) (Maybe Issue))
forall a.
FromJSON a =>
Text
-> [GitLabParam] -> GitLab (Either (Response ByteString) (Maybe a))
gitlabPost Text
addr [GitLabParam]
dataBody
where
dataBody :: [GitLabParam]
dataBody :: [GitLabParam]
dataBody =
[]
addr :: Text
addr =
Text
"/projects/"
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show (Project -> Int
project_id Project
prj))
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"/issues/"
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
issueId)
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"/unsubscribe"
createTodo ::
Project ->
IssueId ->
GitLab (Either (Response BSL.ByteString) (Maybe Todo))
createTodo :: Project
-> Int -> GitLab (Either (Response ByteString) (Maybe Todo))
createTodo Project
prj Int
issueId =
Text
-> [GitLabParam]
-> GitLab (Either (Response ByteString) (Maybe Todo))
forall a.
FromJSON a =>
Text
-> [GitLabParam] -> GitLab (Either (Response ByteString) (Maybe a))
gitlabPost Text
addr [GitLabParam]
dataBody
where
dataBody :: [GitLabParam]
dataBody :: [GitLabParam]
dataBody =
[]
addr :: Text
addr =
Text
"/projects/"
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show (Project -> Int
project_id Project
prj))
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"/issues/"
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
issueId)
Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"/todo"
issueMergeRequests ::
Project ->
IssueId ->
GitLab (Either (Response BSL.ByteString) [MergeRequest])
issueMergeRequests :: Project
-> Int -> GitLab (Either (Response ByteString) [MergeRequest])
issueMergeRequests Project
prj Int
issueId = do
Text
-> [GitLabParam]
-> GitLab (Either (Response ByteString) [MergeRequest])
forall a.
FromJSON a =>
Text -> [GitLabParam] -> GitLab (Either (Response ByteString) [a])
gitlabGetMany Text
urlPath []
where
urlPath :: Text
urlPath =
String -> Text
T.pack (String -> Text) -> String -> Text
forall a b. (a -> b) -> a -> b
$
String
"/projects/"
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Int -> String
forall a. Show a => a -> String
show (Project -> Int
project_id Project
prj)
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"/issues/"
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Int -> String
forall a. Show a => a -> String
show Int
issueId
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"/related_merge_requests"
issueMergeRequestsThatClose ::
Project ->
IssueId ->
GitLab (Either (Response BSL.ByteString) [MergeRequest])
issueMergeRequestsThatClose :: Project
-> Int -> GitLab (Either (Response ByteString) [MergeRequest])
issueMergeRequestsThatClose Project
prj Int
issueId = do
Text
-> [GitLabParam]
-> GitLab (Either (Response ByteString) [MergeRequest])
forall a.
FromJSON a =>
Text -> [GitLabParam] -> GitLab (Either (Response ByteString) [a])
gitlabGetMany Text
urlPath []
where
urlPath :: Text
urlPath =
String -> Text
T.pack (String -> Text) -> String -> Text
forall a b. (a -> b) -> a -> b
$
String
"/projects/"
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Int -> String
forall a. Show a => a -> String
show (Project -> Int
project_id Project
prj)
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"/issues/"
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Int -> String
forall a. Show a => a -> String
show Int
issueId
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"/closed_by"
issueParticipants ::
Project ->
IssueId ->
GitLab (Either (Response BSL.ByteString) [User])
issueParticipants :: Project -> Int -> GitLab (Either (Response ByteString) [User])
issueParticipants Project
prj Int
issueId = do
Text
-> [GitLabParam] -> GitLab (Either (Response ByteString) [User])
forall a.
FromJSON a =>
Text -> [GitLabParam] -> GitLab (Either (Response ByteString) [a])
gitlabGetMany Text
urlPath []
where
urlPath :: Text
urlPath =
String -> Text
T.pack (String -> Text) -> String -> Text
forall a b. (a -> b) -> a -> b
$
String
"/projects/"
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Int -> String
forall a. Show a => a -> String
show (Project -> Int
project_id Project
prj)
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"/issues/"
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Int -> String
forall a. Show a => a -> String
show Int
issueId
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"/participants"
issueStatisticsUser ::
IssueFilterAttrs ->
GitLab IssueStatistics
issueStatisticsUser :: IssueFilterAttrs -> GitLab IssueStatistics
issueStatisticsUser IssueFilterAttrs
attrs =
GitLab (Either (Response ByteString) (Maybe IssueStatistics))
-> GitLab IssueStatistics
forall a b. GitLab (Either a (Maybe b)) -> GitLab b
gitlabUnsafe (Text
-> [GitLabParam]
-> GitLab (Either (Response ByteString) (Maybe IssueStatistics))
forall a.
FromJSON a =>
Text
-> [GitLabParam] -> GitLab (Either (Response ByteString) (Maybe a))
gitlabGetOne Text
urlPath (IssueFilterAttrs -> [GitLabParam]
issueFilters IssueFilterAttrs
attrs))
where
urlPath :: Text
urlPath =
String -> Text
T.pack
String
"/issues_statistics"
issueStatisticsGroup ::
Group ->
IssueFilterAttrs ->
GitLab IssueStatistics
issueStatisticsGroup :: Group -> IssueFilterAttrs -> GitLab IssueStatistics
issueStatisticsGroup Group
group IssueFilterAttrs
filters = do
Either (Response ByteString) (Maybe IssueStatistics)
result <- Int
-> IssueFilterAttrs
-> GitLab (Either (Response ByteString) (Maybe IssueStatistics))
issueStatisticsGroup' (Group -> Int
group_id Group
group) IssueFilterAttrs
filters
case Either (Response ByteString) (Maybe IssueStatistics)
result of
Left Response ByteString
_s -> String -> GitLab IssueStatistics
forall a. HasCallStack => String -> a
error String
"issueStatisticsGroup error"
Right Maybe IssueStatistics
Nothing -> String -> GitLab IssueStatistics
forall a. HasCallStack => String -> a
error String
"issueStatisticsGroup error"
Right (Just IssueStatistics
stats) -> IssueStatistics -> GitLab IssueStatistics
forall a. a -> GitLabT IO a
forall (m :: * -> *) a. Monad m => a -> m a
return IssueStatistics
stats
issueStatisticsGroup' ::
Int ->
IssueFilterAttrs ->
GitLab (Either (Response BSL.ByteString) (Maybe IssueStatistics))
issueStatisticsGroup' :: Int
-> IssueFilterAttrs
-> GitLab (Either (Response ByteString) (Maybe IssueStatistics))
issueStatisticsGroup' Int
groupId IssueFilterAttrs
attrs =
Text
-> [GitLabParam]
-> GitLab (Either (Response ByteString) (Maybe IssueStatistics))
forall a.
FromJSON a =>
Text
-> [GitLabParam] -> GitLab (Either (Response ByteString) (Maybe a))
gitlabGetOne Text
urlPath (IssueFilterAttrs -> [GitLabParam]
issueFilters IssueFilterAttrs
attrs)
where
urlPath :: Text
urlPath =
String -> Text
T.pack (String -> Text) -> String -> Text
forall a b. (a -> b) -> a -> b
$
String
"/groups/"
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Int -> String
forall a. Show a => a -> String
show Int
groupId
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"/issues_statistics"
issueStatisticsProject ::
Project ->
IssueFilterAttrs ->
GitLab IssueStatistics
issueStatisticsProject :: Project -> IssueFilterAttrs -> GitLab IssueStatistics
issueStatisticsProject Project
proj IssueFilterAttrs
filters = do
Either (Response ByteString) (Maybe IssueStatistics)
result <- Int
-> IssueFilterAttrs
-> GitLab (Either (Response ByteString) (Maybe IssueStatistics))
issueStatisticsProject' (Project -> Int
project_id Project
proj) IssueFilterAttrs
filters
case Either (Response ByteString) (Maybe IssueStatistics)
result of
Left Response ByteString
_s -> String -> GitLab IssueStatistics
forall a. HasCallStack => String -> a
error String
"issueStatisticsProject error"
Right Maybe IssueStatistics
Nothing -> String -> GitLab IssueStatistics
forall a. HasCallStack => String -> a
error String
"issueStatisticsProject error"
Right (Just IssueStatistics
stats) -> IssueStatistics -> GitLab IssueStatistics
forall a. a -> GitLabT IO a
forall (m :: * -> *) a. Monad m => a -> m a
return IssueStatistics
stats
issueStatisticsProject' ::
Int ->
IssueFilterAttrs ->
GitLab (Either (Response BSL.ByteString) (Maybe IssueStatistics))
issueStatisticsProject' :: Int
-> IssueFilterAttrs
-> GitLab (Either (Response ByteString) (Maybe IssueStatistics))
issueStatisticsProject' Int
projId IssueFilterAttrs
attrs =
Text
-> [GitLabParam]
-> GitLab (Either (Response ByteString) (Maybe IssueStatistics))
forall a.
FromJSON a =>
Text
-> [GitLabParam] -> GitLab (Either (Response ByteString) (Maybe a))
gitlabGetOne Text
urlPath (IssueFilterAttrs -> [GitLabParam]
issueFilters IssueFilterAttrs
attrs)
where
urlPath :: Text
urlPath =
String -> Text
T.pack (String -> Text) -> String -> Text
forall a b. (a -> b) -> a -> b
$
String
"/projects/"
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Int -> String
forall a. Show a => a -> String
show Int
projId
String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"/issues_statistics"
data IssueAttrs = IssueAttrs
{ IssueAttrs -> Int
set_issue_id :: ProjectId,
IssueAttrs -> Maybe Text
set_issue_title :: Maybe Text,
IssueAttrs -> Maybe Text
set_issue_description :: Maybe Text,
IssueAttrs -> Maybe Bool
set_issue_confidential :: Maybe Bool,
IssueAttrs -> Maybe Int
set_issue_assignee_id :: Maybe Int,
IssueAttrs -> Maybe [Int]
set_issue_assignee_ids :: Maybe [Int],
IssueAttrs -> Maybe Int
set_issue_milestone_id :: Maybe Int,
IssueAttrs -> Maybe [Text]
set_issue_labels :: Maybe [Text],
IssueAttrs -> Maybe Text
set_issue_state_event :: Maybe Text,
IssueAttrs -> Maybe UTCTime
set_issue_updated_at :: Maybe UTCTime,
IssueAttrs -> Maybe UTCTime
set_issue_due_date :: Maybe UTCTime,
IssueAttrs -> Maybe Int
set_issue_weight :: Maybe Int,
IssueAttrs -> Maybe Bool
set_issue_discussion_locked :: Maybe Bool,
IssueAttrs -> Maybe Int
set_issue_epic_id :: Maybe Int,
IssueAttrs -> Maybe Int
set_issue_epic_iid :: Maybe Int
}
deriving (Int -> IssueAttrs -> String -> String
[IssueAttrs] -> String -> String
IssueAttrs -> String
(Int -> IssueAttrs -> String -> String)
-> (IssueAttrs -> String)
-> ([IssueAttrs] -> String -> String)
-> Show IssueAttrs
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
$cshowsPrec :: Int -> IssueAttrs -> String -> String
showsPrec :: Int -> IssueAttrs -> String -> String
$cshow :: IssueAttrs -> String
show :: IssueAttrs -> String
$cshowList :: [IssueAttrs] -> String -> String
showList :: [IssueAttrs] -> String -> String
Show)
data IssueFilterAttrs = IssueFilterAttrs
{ IssueFilterAttrs -> Maybe Int
issueFilter_assignee_id :: Maybe Int,
IssueFilterAttrs -> Maybe String
issueFilter_assignee_username :: Maybe String,
IssueFilterAttrs -> Maybe Int
issueFilter_author_id :: Maybe Int,
IssueFilterAttrs -> Maybe String
issueFilter_author_username :: Maybe String,
IssueFilterAttrs -> Maybe Bool
issueFilter_confidential :: Maybe Bool,
IssueFilterAttrs -> Maybe UTCTime
issueFilter_created_after :: Maybe UTCTime,
IssueFilterAttrs -> Maybe UTCTime
issueFilter_created_before :: Maybe UTCTime,
IssueFilterAttrs -> Maybe DueDate
issueFilter_due_date :: Maybe DueDate,
IssueFilterAttrs -> Maybe Int
issueFilter_iids :: Maybe Int,
IssueFilterAttrs -> Maybe SearchIn
issueFilter_in :: Maybe SearchIn,
IssueFilterAttrs -> Maybe Int
issueFilter_iteration_id :: Maybe Int,
IssueFilterAttrs -> Maybe String
issueFilter_iteration_title :: Maybe String,
IssueFilterAttrs -> Maybe String
issueFilter_milestone :: Maybe String,
IssueFilterAttrs -> Maybe String
issueFilter_labels :: Maybe String,
IssueFilterAttrs -> Maybe String
issueFilter_my_reaction_emoji :: Maybe String,
IssueFilterAttrs -> Maybe Bool
issueFilter_non_archived :: Maybe Bool,
IssueFilterAttrs -> Maybe OrderBy
issueFilter_order_by :: Maybe OrderBy,
IssueFilterAttrs -> Maybe Scope
issueFilter_scope :: Maybe Scope,
IssueFilterAttrs -> Maybe String
issueFilter_search :: Maybe String,
IssueFilterAttrs -> Maybe SortBy
issueFilter_sort :: Maybe SortBy,
IssueFilterAttrs -> Maybe IssueState
issueFilter_state :: Maybe IssueState,
IssueFilterAttrs -> Maybe UTCTime
issueFilter_updated_after :: Maybe UTCTime,
IssueFilterAttrs -> Maybe UTCTime
issueFilter_updated_before :: Maybe UTCTime,
IssueFilterAttrs -> Maybe Bool
issueFilter_with_labels_details :: Maybe Bool
}
issueAttrs :: Int -> IssueAttrs -> [GitLabParam]
issueAttrs :: Int -> IssueAttrs -> [GitLabParam]
issueAttrs Int
prjId IssueAttrs
filters =
[Maybe GitLabParam] -> [GitLabParam]
forall a. [Maybe a] -> [a]
catMaybes ([Maybe GitLabParam] -> [GitLabParam])
-> [Maybe GitLabParam] -> [GitLabParam]
forall a b. (a -> b) -> a -> b
$
[ GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"id", Text -> Maybe ByteString
textToBS (String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
prjId))),
(\Int
i -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"assignee_id", Text -> Maybe ByteString
textToBS (String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
i)))) (Int -> Maybe GitLabParam) -> Maybe Int -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueAttrs -> Maybe Int
set_issue_assignee_id IssueAttrs
filters,
(\Text
t -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"title", Text -> Maybe ByteString
textToBS Text
t)) (Text -> Maybe GitLabParam) -> Maybe Text -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueAttrs -> Maybe Text
set_issue_title IssueAttrs
filters,
(\Text
t -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"description", Text -> Maybe ByteString
textToBS Text
t)) (Text -> Maybe GitLabParam) -> Maybe Text -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueAttrs -> Maybe Text
set_issue_description IssueAttrs
filters,
(\Bool
b -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"confidential", Text -> Maybe ByteString
textToBS (Bool -> Text
showBool Bool
b))) (Bool -> Maybe GitLabParam) -> Maybe Bool -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueAttrs -> Maybe Bool
set_issue_confidential IssueAttrs
filters,
(\Int
i -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"milestone_id", Text -> Maybe ByteString
textToBS (String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
i)))) (Int -> Maybe GitLabParam) -> Maybe Int -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueAttrs -> Maybe Int
set_issue_milestone_id IssueAttrs
filters,
(\[Text]
ts -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"labels", Text -> Maybe ByteString
textToBS (Text -> [Text] -> Text
T.intercalate (String -> Text
T.pack String
",") [Text]
ts))) ([Text] -> Maybe GitLabParam) -> Maybe [Text] -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueAttrs -> Maybe [Text]
set_issue_labels IssueAttrs
filters,
(\Text
t -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"state_event", Text -> Maybe ByteString
textToBS Text
t)) (Text -> Maybe GitLabParam) -> Maybe Text -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueAttrs -> Maybe Text
set_issue_state_event IssueAttrs
filters,
(\UTCTime
d -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"updated_at", String -> Maybe ByteString
stringToBS (UTCTime -> String
forall a. Show a => a -> String
show UTCTime
d))) (UTCTime -> Maybe GitLabParam)
-> Maybe UTCTime -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueAttrs -> Maybe UTCTime
set_issue_updated_at IssueAttrs
filters,
(\UTCTime
d -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"due_date", String -> Maybe ByteString
stringToBS (UTCTime -> String
forall a. Show a => a -> String
show UTCTime
d))) (UTCTime -> Maybe GitLabParam)
-> Maybe UTCTime -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueAttrs -> Maybe UTCTime
set_issue_due_date IssueAttrs
filters,
(\Int
i -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"weight", Text -> Maybe ByteString
textToBS (String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
i)))) (Int -> Maybe GitLabParam) -> Maybe Int -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueAttrs -> Maybe Int
set_issue_weight IssueAttrs
filters,
(\Bool
b -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"discussion_locked", Text -> Maybe ByteString
textToBS (Bool -> Text
showBool Bool
b))) (Bool -> Maybe GitLabParam) -> Maybe Bool -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueAttrs -> Maybe Bool
set_issue_discussion_locked IssueAttrs
filters,
(\Int
i -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"epic_id", Text -> Maybe ByteString
textToBS (String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
i)))) (Int -> Maybe GitLabParam) -> Maybe Int -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueAttrs -> Maybe Int
set_issue_epic_id IssueAttrs
filters,
(\Int
i -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"epic_iid", Text -> Maybe ByteString
textToBS (String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
i)))) (Int -> Maybe GitLabParam) -> Maybe Int -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueAttrs -> Maybe Int
set_issue_epic_iid IssueAttrs
filters
]
[Maybe GitLabParam] -> [Maybe GitLabParam] -> [Maybe GitLabParam]
forall a. Semigroup a => a -> a -> a
<> case IssueAttrs -> Maybe [Int]
set_issue_assignee_ids IssueAttrs
filters of
Maybe [Int]
Nothing -> []
Just [Int]
ids ->
(Int -> Maybe GitLabParam) -> [Int] -> [Maybe GitLabParam]
forall a b. (a -> b) -> [a] -> [b]
map
(\Int
i -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"assignee_ids[]", String -> Maybe ByteString
stringToBS (Int -> String
forall a. Show a => a -> String
show Int
i)))
[Int]
ids
where
textToBS :: Text -> Maybe ByteString
textToBS = ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (ByteString -> Maybe ByteString)
-> (Text -> ByteString) -> Text -> Maybe ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> ByteString
T.encodeUtf8
stringToBS :: String -> Maybe ByteString
stringToBS = ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (ByteString -> Maybe ByteString)
-> (String -> ByteString) -> String -> Maybe ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> ByteString
T.encodeUtf8 (Text -> ByteString) -> (String -> Text) -> String -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
T.pack
showBool :: Bool -> Text
showBool :: Bool -> Text
showBool Bool
True = Text
"true"
showBool Bool
False = Text
"false"
issueFilters :: IssueFilterAttrs -> [GitLabParam]
issueFilters :: IssueFilterAttrs -> [GitLabParam]
issueFilters IssueFilterAttrs
filters =
[Maybe GitLabParam] -> [GitLabParam]
forall a. [Maybe a] -> [a]
catMaybes
[ (\Int
i -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"assignee_id", Text -> Maybe ByteString
textToBS (String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
i)))) (Int -> Maybe GitLabParam) -> Maybe Int -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueFilterAttrs -> Maybe Int
issueFilter_assignee_id IssueFilterAttrs
filters,
(\String
t -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"assignee_username", Text -> Maybe ByteString
textToBS (String -> Text
T.pack String
t))) (String -> Maybe GitLabParam) -> Maybe String -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueFilterAttrs -> Maybe String
issueFilter_assignee_username IssueFilterAttrs
filters,
(\Int
i -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"author_id", Text -> Maybe ByteString
textToBS (String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
i)))) (Int -> Maybe GitLabParam) -> Maybe Int -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueFilterAttrs -> Maybe Int
issueFilter_author_id IssueFilterAttrs
filters,
(\String
i -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"author_username", Text -> Maybe ByteString
textToBS (String -> Text
T.pack (String -> String
forall a. Show a => a -> String
show String
i)))) (String -> Maybe GitLabParam) -> Maybe String -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueFilterAttrs -> Maybe String
issueFilter_author_username IssueFilterAttrs
filters,
(\Bool
b -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"confidential", Text -> Maybe ByteString
textToBS (Bool -> Text
showBool Bool
b))) (Bool -> Maybe GitLabParam) -> Maybe Bool -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueFilterAttrs -> Maybe Bool
issueFilter_confidential IssueFilterAttrs
filters,
(\UTCTime
t -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"created_after", Text -> Maybe ByteString
textToBS (UTCTime -> Text
showTime UTCTime
t))) (UTCTime -> Maybe GitLabParam)
-> Maybe UTCTime -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueFilterAttrs -> Maybe UTCTime
issueFilter_created_after IssueFilterAttrs
filters,
(\UTCTime
t -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"created_before", Text -> Maybe ByteString
textToBS (UTCTime -> Text
showTime UTCTime
t))) (UTCTime -> Maybe GitLabParam)
-> Maybe UTCTime -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueFilterAttrs -> Maybe UTCTime
issueFilter_created_before IssueFilterAttrs
filters,
(\DueDate
due -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"due_date", Text -> Maybe ByteString
textToBS (String -> Text
T.pack (DueDate -> String
forall a. Show a => a -> String
show DueDate
due)))) (DueDate -> Maybe GitLabParam)
-> Maybe DueDate -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueFilterAttrs -> Maybe DueDate
issueFilter_due_date IssueFilterAttrs
filters,
(\Int
iids -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"iids[]", Text -> Maybe ByteString
textToBS (String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
iids)))) (Int -> Maybe GitLabParam) -> Maybe Int -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueFilterAttrs -> Maybe Int
issueFilter_iids IssueFilterAttrs
filters,
(\SearchIn
issueIn -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"assignee_id", Text -> Maybe ByteString
textToBS (String -> Text
T.pack (SearchIn -> String
forall a. Show a => a -> String
show SearchIn
issueIn)))) (SearchIn -> Maybe GitLabParam)
-> Maybe SearchIn -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueFilterAttrs -> Maybe SearchIn
issueFilter_in IssueFilterAttrs
filters,
(\Int
i -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"iteration_id", Text -> Maybe ByteString
textToBS (String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
i)))) (Int -> Maybe GitLabParam) -> Maybe Int -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueFilterAttrs -> Maybe Int
issueFilter_iteration_id IssueFilterAttrs
filters,
(\String
s -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"iteration_title", Text -> Maybe ByteString
textToBS (String -> Text
T.pack String
s))) (String -> Maybe GitLabParam) -> Maybe String -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueFilterAttrs -> Maybe String
issueFilter_iteration_title IssueFilterAttrs
filters,
(\String
s -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"milestone", Text -> Maybe ByteString
textToBS (String -> Text
T.pack String
s))) (String -> Maybe GitLabParam) -> Maybe String -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueFilterAttrs -> Maybe String
issueFilter_milestone IssueFilterAttrs
filters,
(\String
s -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"labels", Text -> Maybe ByteString
textToBS (String -> Text
T.pack String
s))) (String -> Maybe GitLabParam) -> Maybe String -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueFilterAttrs -> Maybe String
issueFilter_labels IssueFilterAttrs
filters,
(\String
s -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"my_reaction_emoji", Text -> Maybe ByteString
textToBS (String -> Text
T.pack String
s))) (String -> Maybe GitLabParam) -> Maybe String -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueFilterAttrs -> Maybe String
issueFilter_my_reaction_emoji IssueFilterAttrs
filters,
(\Bool
b -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"non_archived", Text -> Maybe ByteString
textToBS (Bool -> Text
showBool Bool
b))) (Bool -> Maybe GitLabParam) -> Maybe Bool -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueFilterAttrs -> Maybe Bool
issueFilter_non_archived IssueFilterAttrs
filters,
(\OrderBy
x -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"order_by", Text -> Maybe ByteString
textToBS (String -> Text
T.pack (OrderBy -> String
forall a. Show a => a -> String
show OrderBy
x)))) (OrderBy -> Maybe GitLabParam)
-> Maybe OrderBy -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueFilterAttrs -> Maybe OrderBy
issueFilter_order_by IssueFilterAttrs
filters,
(\Scope
x -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"scope", Text -> Maybe ByteString
textToBS (String -> Text
T.pack (Scope -> String
forall a. Show a => a -> String
show Scope
x)))) (Scope -> Maybe GitLabParam) -> Maybe Scope -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueFilterAttrs -> Maybe Scope
issueFilter_scope IssueFilterAttrs
filters,
(\String
s -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"search", Text -> Maybe ByteString
textToBS (String -> Text
T.pack String
s))) (String -> Maybe GitLabParam) -> Maybe String -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueFilterAttrs -> Maybe String
issueFilter_search IssueFilterAttrs
filters,
(\SortBy
x -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"sort", Text -> Maybe ByteString
textToBS (String -> Text
T.pack (SortBy -> String
forall a. Show a => a -> String
show SortBy
x)))) (SortBy -> Maybe GitLabParam) -> Maybe SortBy -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueFilterAttrs -> Maybe SortBy
issueFilter_sort IssueFilterAttrs
filters,
(\IssueState
x -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"state", Text -> Maybe ByteString
textToBS (String -> Text
T.pack (IssueState -> String
forall a. Show a => a -> String
show IssueState
x)))) (IssueState -> Maybe GitLabParam)
-> Maybe IssueState -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueFilterAttrs -> Maybe IssueState
issueFilter_state IssueFilterAttrs
filters,
(\UTCTime
t -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"updated_after", Text -> Maybe ByteString
textToBS (UTCTime -> Text
showTime UTCTime
t))) (UTCTime -> Maybe GitLabParam)
-> Maybe UTCTime -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueFilterAttrs -> Maybe UTCTime
issueFilter_updated_after IssueFilterAttrs
filters,
(\UTCTime
t -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"updated_before", Text -> Maybe ByteString
textToBS (UTCTime -> Text
showTime UTCTime
t))) (UTCTime -> Maybe GitLabParam)
-> Maybe UTCTime -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueFilterAttrs -> Maybe UTCTime
issueFilter_updated_before IssueFilterAttrs
filters,
(\Bool
b -> GitLabParam -> Maybe GitLabParam
forall a. a -> Maybe a
Just (ByteString
"with_labels_details", Text -> Maybe ByteString
textToBS (Bool -> Text
showBool Bool
b))) (Bool -> Maybe GitLabParam) -> Maybe Bool -> Maybe GitLabParam
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IssueFilterAttrs -> Maybe Bool
issueFilter_with_labels_details IssueFilterAttrs
filters
]
where
textToBS :: Text -> Maybe ByteString
textToBS = ByteString -> Maybe ByteString
forall a. a -> Maybe a
Just (ByteString -> Maybe ByteString)
-> (Text -> ByteString) -> Text -> Maybe ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> ByteString
T.encodeUtf8
showBool :: Bool -> Text
showBool :: Bool -> Text
showBool Bool
True = Text
"true"
showBool Bool
False = Text
"false"
showTime :: UTCTime -> Text
showTime :: UTCTime -> Text
showTime = String -> Text
T.pack (String -> Text) -> (UTCTime -> String) -> UTCTime -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UTCTime -> String
forall t. ISO8601 t => t -> String
iso8601Show
data DueDate
= NoDueDate
| Overdue
| Week
| Month
| NextMonthPreviousTwoWeeks
instance Show DueDate where
show :: DueDate -> String
show DueDate
NoDueDate = String
"0"
show DueDate
Overdue = String
"overdue"
show DueDate
Week = String
"week"
show DueDate
Month = String
"month"
show DueDate
NextMonthPreviousTwoWeeks = String
"next_month_and_previous_two_weeks"
data IssueState
= IssueOpen
| IssueClosed
instance Show IssueState where
show :: IssueState -> String
show IssueState
IssueOpen = String
"opened"
show IssueState
IssueClosed = String
"closed"
defaultIssueFilters :: IssueFilterAttrs
defaultIssueFilters :: IssueFilterAttrs
defaultIssueFilters =
Maybe Int
-> Maybe String
-> Maybe Int
-> Maybe String
-> Maybe Bool
-> Maybe UTCTime
-> Maybe UTCTime
-> Maybe DueDate
-> Maybe Int
-> Maybe SearchIn
-> Maybe Int
-> Maybe String
-> Maybe String
-> Maybe String
-> Maybe String
-> Maybe Bool
-> Maybe OrderBy
-> Maybe Scope
-> Maybe String
-> Maybe SortBy
-> Maybe IssueState
-> Maybe UTCTime
-> Maybe UTCTime
-> Maybe Bool
-> IssueFilterAttrs
IssueFilterAttrs Maybe Int
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing Maybe Int
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing Maybe Bool
forall a. Maybe a
Nothing Maybe UTCTime
forall a. Maybe a
Nothing Maybe UTCTime
forall a. Maybe a
Nothing Maybe DueDate
forall a. Maybe a
Nothing Maybe Int
forall a. Maybe a
Nothing Maybe SearchIn
forall a. Maybe a
Nothing Maybe Int
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing Maybe Bool
forall a. Maybe a
Nothing Maybe OrderBy
forall a. Maybe a
Nothing (Scope -> Maybe Scope
forall a. a -> Maybe a
Just Scope
All) Maybe String
forall a. Maybe a
Nothing Maybe SortBy
forall a. Maybe a
Nothing Maybe IssueState
forall a. Maybe a
Nothing Maybe UTCTime
forall a. Maybe a
Nothing Maybe UTCTime
forall a. Maybe a
Nothing Maybe Bool
forall a. Maybe a
Nothing
defaultIssueAttrs ::
Int ->
IssueAttrs
defaultIssueAttrs :: Int -> IssueAttrs
defaultIssueAttrs Int
prjId =
Int
-> Maybe Text
-> Maybe Text
-> Maybe Bool
-> Maybe Int
-> Maybe [Int]
-> Maybe Int
-> Maybe [Text]
-> Maybe Text
-> Maybe UTCTime
-> Maybe UTCTime
-> Maybe Int
-> Maybe Bool
-> Maybe Int
-> Maybe Int
-> IssueAttrs
IssueAttrs Int
prjId Maybe Text
forall a. Maybe a
Nothing Maybe Text
forall a. Maybe a
Nothing Maybe Bool
forall a. Maybe a
Nothing Maybe Int
forall a. Maybe a
Nothing Maybe [Int]
forall a. Maybe a
Nothing Maybe Int
forall a. Maybe a
Nothing Maybe [Text]
forall a. Maybe a
Nothing Maybe Text
forall a. Maybe a
Nothing Maybe UTCTime
forall a. Maybe a
Nothing Maybe UTCTime
forall a. Maybe a
Nothing Maybe Int
forall a. Maybe a
Nothing Maybe Bool
forall a. Maybe a
Nothing Maybe Int
forall a. Maybe a
Nothing Maybe Int
forall a. Maybe a
Nothing
$(deriveJSON defaultOptions {fieldLabelModifier = drop (T.length "set_issue_"), omitNothingFields = True} ''IssueAttrs)