{-# LANGUAGE OverloadedStrings #-}

-- |
-- Module      : Notes
-- Description : Notes on issues, snippets, merge requests and epics.
-- Copyright   : (c) Rob Stewart, Heriot-Watt University, 2020
-- License     : BSD3
-- Maintainer  : robstewart57@gmail.com
-- Stability   : stable
module GitLab.API.Notes where

import qualified Data.ByteString.Lazy as BSL
import Data.Text (Text)
import qualified Data.Text as T
import GitLab.Types
import GitLab.WebRequests.GitLabWebCalls
import Network.HTTP.Client

createMergeRequestNote ::
  -- | project
  Project ->
  -- | merge request IID
  Int ->
  -- | the note
  Text ->
  GitLab (Either (Response BSL.ByteString) (Maybe ()))
createMergeRequestNote :: Project
-> Int -> Text -> GitLab (Either (Response ByteString) (Maybe ()))
createMergeRequestNote Project
project =
  Int
-> Int -> Text -> GitLab (Either (Response ByteString) (Maybe ()))
createMergeRequestNote' (Project -> Int
project_id Project
project)

createMergeRequestNote' ::
  -- | project ID
  Int ->
  -- | merge request IID
  Int ->
  -- | the note
  Text ->
  GitLab (Either (Response BSL.ByteString) (Maybe ()))
createMergeRequestNote' :: Int
-> Int -> Text -> GitLab (Either (Response ByteString) (Maybe ()))
createMergeRequestNote' Int
projectId Int
mergeRequestIID Text
comment =
  Text -> Text -> GitLab (Either (Response ByteString) (Maybe ()))
forall b.
FromJSON b =>
Text -> Text -> GitLab (Either (Response ByteString) (Maybe b))
gitlabPost Text
addr Text
dataBody
  where
    dataBody :: Text
    dataBody :: Text
dataBody =
      String -> Text
T.pack (String -> Text) -> String -> Text
forall a b. (a -> b) -> a -> b
$
        String
"id="
          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
"&merge_request_iid="
          String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Int -> String
forall a. Show a => a -> String
show Int
mergeRequestIID
          String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"&body="
          String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Text -> String
T.unpack Text
comment
    addr :: Text
addr =
      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
"/merge_requests/"
          String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Int -> String
forall a. Show a => a -> String
show Int
mergeRequestIID
          String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"/notes"