module Network.PagerDuty.REST.EscalationPolicies
(
ListPolicies
, listPolicies
, lpQuery
, listOnCallPolicies
, CreatePolicy
, createPolicy
, cpName
, cpRepeatEnabled
, cpNumLoops
, cpEscalationRules
, getPolicy
, UpdatePolicy
, updatePolicy
, upName
, upRepeatEnabled
, upNumLoops
, upEscalationRules
, deletePolicy
, Policy
, pId
, pName
, pNumLoops
, pRules
, pServices
) where
import Control.Lens hiding (Empty)
import Data.Aeson.Lens
import Data.Text (Text)
import Network.HTTP.Types
import Network.PagerDuty.Internal.TH
import Network.PagerDuty.Internal.Types
import Network.PagerDuty.REST.Services (Service)
import Network.PagerDuty.REST.EscalationPolicies.EscalationRules
default (Path)
policies :: Path
policies = "escalation_policies"
data Policy = Policy
{ _pId :: EscalationPolicyId
, _pName :: Text
, _pNumLoops :: !Int
, _pRules :: [Rule]
, _pServices :: [Service]
} deriving (Eq, Show)
deriveJSON ''Policy
makeLens "_pId" ''Policy
makeLens "_pName" ''Policy
makeLens "_pNumLoops" ''Policy
makeLens "_pRules" ''Policy
makeLens "_pServices" ''Policy
newtype ListPolicies = ListPolicies
{ _lpQuery' :: Maybe Text
} deriving (Eq, Show)
instance Paginate ListPolicies
queryRequest ''ListPolicies
lpQuery :: Lens' (Request ListPolicies s b) (Maybe Text)
lpQuery = upd.lpQuery'
listPolicies :: Request ListPolicies s [Policy]
listPolicies =
mk ListPolicies
{ _lpQuery' = Nothing
} & path .~ policies
& unwrap .~ key "escalation_policies"
listOnCallPolicies :: Request ListPolicies s [Policy]
listOnCallPolicies = listPolicies & path .~ policies % "on_call"
data CreatePolicy = CreatePolicy
{ _cpName' :: Text
, _cpRepeatEnabled' :: Bool'
, _cpNumLoops' :: Maybe Int
, _cpEscalationRules' :: [Rule]
} deriving (Eq, Show)
jsonRequest ''CreatePolicy
cpName :: Lens' (Request CreatePolicy s b) Text
cpName = upd.cpName'
cpRepeatEnabled :: Lens' (Request CreatePolicy s b) Bool
cpRepeatEnabled = upd.cpRepeatEnabled'._B
cpNumLoops :: Lens' (Request CreatePolicy s b) (Maybe Int)
cpNumLoops = upd.cpNumLoops'
cpEscalationRules :: Lens' (Request CreatePolicy s b) [Rule]
cpEscalationRules = upd.cpEscalationRules'
createPolicy :: EscalationPolicyId
-> Text
-> [Rule]
-> Request CreatePolicy s Policy
createPolicy i n rs =
mk CreatePolicy
{ _cpName' = n
, _cpRepeatEnabled' = F
, _cpNumLoops' = Nothing
, _cpEscalationRules' = rs
} & meth .~ PUT
& path .~ policies % i
& unwrap .~ key "escalation_policy"
getPolicy :: EscalationPolicyId -> Request Empty s Policy
getPolicy i = empty & path .~ policies % i & unwrap .~ key "escalation_policy"
data UpdatePolicy = UpdatePolicy
{ _upName' :: Maybe Text
, _upRepeatEnabled' :: Maybe Bool'
, _upNumLoops' :: Maybe Int
, _upEscalationRules' :: [Rule]
} deriving (Eq, Show)
jsonRequest ''UpdatePolicy
upName :: Lens' (Request UpdatePolicy s b) (Maybe Text)
upName = upd.upName'
upRepeatEnabled :: Lens' (Request UpdatePolicy s b) (Maybe Bool)
upRepeatEnabled = upd.upRepeatEnabled'.mapping _B
upNumLoops :: Lens' (Request UpdatePolicy s b) (Maybe Int)
upNumLoops = upd.upNumLoops'
upEscalationRules :: Lens' (Request UpdatePolicy s b) [Rule]
upEscalationRules = upd.upEscalationRules'
updatePolicy :: EscalationPolicyId -> Request UpdatePolicy s Policy
updatePolicy i =
mk UpdatePolicy
{ _upName' = Nothing
, _upRepeatEnabled' = Nothing
, _upNumLoops' = Nothing
, _upEscalationRules' = []
} & meth .~ PUT
& path .~ policies % i
& unwrap .~ key "escalation_policy"
deletePolicy :: EscalationPolicyId -> Request Empty s Empty
deletePolicy i = empty & meth .~ DELETE & path .~ policies % i