module Network.PagerDuty.REST.Incidents.Notes
(
listNotes
, CreateNote
, createNote
, createNoteBasic
, cnContent
, Note
, nId
, nCreatedAt
, nUser
, nContent
) where
import Control.Lens hiding ((.=))
import Data.Aeson
import Data.Text (Text)
import Data.Time
import Network.HTTP.Types
import Network.PagerDuty.Internal.TH
import Network.PagerDuty.Internal.Types
import Network.PagerDuty.REST.Users
default (Path)
notes :: IncidentId -> Path
notes i = "incidents" % i % "notes"
data Note = Note
{ _nId :: NoteId
, _nCreatedAt :: Date
, _nUser :: User
, _nContent :: Text
} deriving (Eq, Show)
deriveJSON ''Note
makeLens "_nId" ''Note
makeLens "_nUser" ''Note
makeLens "_nContent" ''Note
nCreatedAt :: Lens' Note UTCTime
nCreatedAt = lens _nCreatedAt (\n x -> n { _nCreatedAt = x }) . _D
listNotes :: IncidentId -> Request Empty s [Note]
listNotes i = empty & path .~ notes i
newtype CreateNote = CreateNote
{ _cnContent' :: Maybe Text
} deriving (Eq, Show)
makeLenses ''CreateNote
instance ToJSON CreateNote where
toJSON cn = object ["note" .= object ["content" .= _cnContent' cn]]
instance QueryLike CreateNote where
toQuery = const []
cnContent :: Lens' (Request CreateNote s b) (Maybe Text)
cnContent = upd.cnContent'
createNote :: IncidentId -> RequesterId -> Request CreateNote s Note
createNote i r = auth (createNoteBasic i) & query .~ [("requester_id", r)]
createNoteBasic :: IncidentId -> Request CreateNote s Note
createNoteBasic i =
mk CreateNote
{ _cnContent' = Nothing
} & meth .~ POST
& path .~ notes i