{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ScopedTypeVariables #-}
module GitLab.API.Members where
import qualified Data.ByteString.Lazy as BSL
import Data.Either
import Data.Text (Text)
import qualified Data.Text as T
import GitLab.Types
import GitLab.WebRequests.GitLabWebCalls
import Network.HTTP.Client
data AccessLevel
= Guest
| Reporter
| Developer
| Maintainer
| Owner
instance Show AccessLevel where
show :: AccessLevel -> String
show AccessLevel
Guest = String
"10"
show AccessLevel
Reporter = String
"20"
show AccessLevel
Developer = String
"30"
show AccessLevel
Maintainer = String
"40"
show AccessLevel
Owner = String
"50"
membersOfProject :: Project -> GitLab [Member]
membersOfProject :: Project -> GitLab [Member]
membersOfProject Project
p = do
Either (Response ByteString) [Member]
result <- Int -> GitLab (Either (Response ByteString) [Member])
membersOfProject' (Project -> Int
project_id Project
p)
[Member] -> GitLab [Member]
forall (m :: * -> *) a. Monad m => a -> m a
return ([Member] -> Either (Response ByteString) [Member] -> [Member]
forall b a. b -> Either a b -> b
fromRight (String -> [Member]
forall a. HasCallStack => String -> a
error String
"membersOfProject error") Either (Response ByteString) [Member]
result)
membersOfProject' :: Int -> GitLab (Either (Response BSL.ByteString) [Member])
membersOfProject' :: Int -> GitLab (Either (Response ByteString) [Member])
membersOfProject' Int
projectId =
Text -> GitLab (Either (Response ByteString) [Member])
forall a.
FromJSON a =>
Text -> GitLab (Either (Response ByteString) [a])
gitlab Text
addr
where
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
"/members"
addMemberToProject ::
Project ->
AccessLevel ->
User ->
GitLab (Either (Response BSL.ByteString) (Maybe Member))
addMemberToProject :: Project
-> AccessLevel
-> User
-> GitLab (Either (Response ByteString) (Maybe Member))
addMemberToProject Project
project AccessLevel
access User
usr =
Int
-> AccessLevel
-> Int
-> GitLab (Either (Response ByteString) (Maybe Member))
addMemberToProject' (Project -> Int
project_id Project
project) AccessLevel
access (User -> Int
user_id User
usr)
addMemberToProject' ::
Int ->
AccessLevel ->
Int ->
GitLab (Either (Response BSL.ByteString) (Maybe Member))
addMemberToProject' :: Int
-> AccessLevel
-> Int
-> GitLab (Either (Response ByteString) (Maybe Member))
addMemberToProject' Int
projectId AccessLevel
access Int
userId =
Text
-> Text -> GitLab (Either (Response ByteString) (Maybe Member))
forall b.
FromJSON b =>
Text -> Text -> GitLab (Either (Response ByteString) (Maybe b))
gitlabPost Text
addr Text
dataBody
where
dataBody :: Text
dataBody :: Text
dataBody =
Text
"user_id=" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
T.pack (Int -> String
forall a. Show a => a -> String
show Int
userId) Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> Text
"&access_level=" Text -> Text -> Text
forall a. Semigroup a => a -> a -> a
<> String -> Text
T.pack (AccessLevel -> String
forall a. Show a => a -> String
show AccessLevel
access)
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
"/members"
addMembersToProject ::
Project ->
AccessLevel ->
[User] ->
GitLab [Either (Response BSL.ByteString) (Maybe Member)]
addMembersToProject :: Project
-> AccessLevel
-> [User]
-> GitLab [Either (Response ByteString) (Maybe Member)]
addMembersToProject Project
project AccessLevel
access =
(User -> GitLab (Either (Response ByteString) (Maybe Member)))
-> [User] -> GitLab [Either (Response ByteString) (Maybe Member)]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (Project
-> AccessLevel
-> User
-> GitLab (Either (Response ByteString) (Maybe Member))
addMemberToProject Project
project AccessLevel
access)
addMembersToProject' ::
Int ->
AccessLevel ->
[Int] ->
GitLab [Either (Response BSL.ByteString) (Maybe Member)]
addMembersToProject' :: Int
-> AccessLevel
-> [Int]
-> GitLab [Either (Response ByteString) (Maybe Member)]
addMembersToProject' Int
projectId AccessLevel
access =
(Int -> GitLab (Either (Response ByteString) (Maybe Member)))
-> [Int] -> GitLab [Either (Response ByteString) (Maybe Member)]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (Int
-> AccessLevel
-> Int
-> GitLab (Either (Response ByteString) (Maybe Member))
addMemberToProject' Int
projectId AccessLevel
access)