module Web.Stripe.Plan
(
createPlan
, createPlanIntervalCount
, createPlanTrialPeriodDays
, createPlanBase
, getPlan
, getPlans
, updatePlanName
, updatePlanDescription
, updatePlanBase
, deletePlan
, PlanId (..)
, Plan (..)
, Interval (..)
, StripeList (..)
, IntervalCount (..)
, TrialPeriodDays (..)
, StripeDeleteResult (..)
, Currency (..)
, Email (..)
, Limit
, StartingAfter
, EndingBefore
, Name
, Amount
, Description
, MetaData
) where
import Web.Stripe.Client.Internal (callAPI, Method(POST, GET, DELETE), toText,
getParams, toMetaData, Stripe,
StripeRequest(..), toTextLower, (</>))
import Web.Stripe.Types (PlanId (..) , Plan (..), Interval (..), StripeList(..),
IntervalCount (..), TrialPeriodDays (..), Limit, Email (..),
StartingAfter, EndingBefore, StripeDeleteResult(..),
Currency (..), Name, Amount, Description, MetaData)
createPlanBase
:: PlanId
-> Amount
-> Currency
-> Interval
-> Name
-> Maybe IntervalCount
-> Maybe TrialPeriodDays
-> Maybe Description
-> MetaData
-> Stripe Plan
createPlanBase
(PlanId planid)
amount
currency
interval
name
intervalCount
trialPeriodDays
description
metadata = callAPI request
where request = StripeRequest POST url params
url = "plans"
params = toMetaData metadata ++ getParams [
("id", Just planid)
, ("amount", toText `fmap` Just amount)
, ("currency", toTextLower `fmap` Just currency)
, ("interval", toText `fmap` Just interval)
, ("name", Just name)
, ("interval_count", (\(IntervalCount x) -> toText x) `fmap` intervalCount )
, ("trial_period_days", (\(TrialPeriodDays x) -> toText x) `fmap` trialPeriodDays )
, ("statement_description", description )
]
createPlan
:: PlanId
-> Amount
-> Currency
-> Interval
-> Name
-> MetaData
-> Stripe Plan
createPlan
planid
amount
currency
intervalCount
name = createPlanBase planid amount currency intervalCount name Nothing Nothing Nothing
createPlanIntervalCount
:: PlanId
-> Amount
-> Currency
-> Interval
-> Name
-> IntervalCount
-> Stripe Plan
createPlanIntervalCount
planid
amount
currency
interval
name
intervalCount = createPlanBase planid amount
currency interval name
(Just intervalCount) Nothing Nothing []
createPlanTrialPeriodDays
:: PlanId
-> Amount
-> Currency
-> Interval
-> Name
-> TrialPeriodDays
-> Stripe Plan
createPlanTrialPeriodDays
planid
amount
currency
interval
name
trialPeriodDays =
createPlanBase
planid
amount
currency
interval
name
Nothing
(Just trialPeriodDays)
Nothing
[]
getPlan
:: PlanId
-> Stripe Plan
getPlan
(PlanId planid) = callAPI request
where request = StripeRequest GET url params
url = "plans" </> planid
params = []
getPlans
:: Limit
-> StartingAfter PlanId
-> EndingBefore PlanId
-> Stripe (StripeList Plan)
getPlans
limit
startingAfter
endingBefore = callAPI request
where request = StripeRequest GET url params
url = "plans"
params = getParams [
("limit", toText `fmap` limit )
, ("starting_after", (\(PlanId x) -> x) `fmap` startingAfter)
, ("ending_before", (\(PlanId x) -> x) `fmap` endingBefore)
]
updatePlanBase
:: PlanId
-> Maybe Name
-> Maybe Description
-> MetaData
-> Stripe Plan
updatePlanBase
(PlanId planid)
name
description
metadata = callAPI request
where request = StripeRequest POST url params
url = "plans" </> planid
params = toMetaData metadata ++ getParams [
("name", name)
, ("statement_description", description)
]
updatePlanDescription
:: PlanId
-> Description
-> Stripe Plan
updatePlanDescription
(PlanId planid)
description = callAPI request
where request = StripeRequest POST url params
url = "plans" </> planid
params = getParams [
("statement_description", Just description)
]
updatePlanName
:: PlanId
-> Description
-> Stripe Plan
updatePlanName
(PlanId planid)
name = callAPI request
where request = StripeRequest POST url params
url = "plans" </> planid
params = getParams [
("name", Just name)
]
deletePlan
:: PlanId
-> Stripe StripeDeleteResult
deletePlan
(PlanId planid) = callAPI request
where request = StripeRequest DELETE url params
url = "plans" </> planid
params = []