module Web.Stripe.Subscription
(
createSubscription
, getSubscription
, getSubscriptionExpandable
, getSubscriptions
, getSubscriptionsExpandable
, updateSubscription
, cancelSubscription
, Subscription (..)
, SubscriptionId (..)
, SubscriptionStatus (..)
, CustomerId (..)
, CouponId (..)
, Coupon (..)
, PlanId (..)
, StripeList (..)
) where
import Web.Stripe.Client.Internal (Method (GET, POST, DELETE), Stripe,
StripeRequest (..), callAPI,
getParams, toExpandable,
toMetaData, toText, (</>))
import Web.Stripe.Types (CustomerId (..), EndingBefore,
ExpandParams, Limit, MetaData,
PlanId (..), StartingAfter, CouponId(..),
Subscription (..), StripeList(..),
SubscriptionId (..), Coupon(..),
SubscriptionStatus (..))
import Web.Stripe.Types.Util (getCustomerId)
createSubscription
:: CustomerId
-> PlanId
-> MetaData
-> Stripe Subscription
createSubscription
customerid
(PlanId planid)
metadata = callAPI request
where request = StripeRequest POST url params
url = "customers" </> getCustomerId customerid </> "subscriptions"
params = toMetaData metadata ++ getParams [ ("plan", Just planid) ]
getSubscription
:: CustomerId
-> SubscriptionId
-> Stripe Subscription
getSubscription
customerid
subscriptionid =
getSubscriptionExpandable
customerid subscriptionid []
getSubscriptionExpandable
:: CustomerId
-> SubscriptionId
-> ExpandParams
-> Stripe Subscription
getSubscriptionExpandable
customerid
(SubscriptionId subscriptionid)
expandParams = callAPI request
where request = StripeRequest GET url params
url = "customers" </> getCustomerId customerid </> "subscriptions" </> subscriptionid
params = toExpandable expandParams
getSubscriptions
:: CustomerId
-> Limit
-> StartingAfter SubscriptionId
-> EndingBefore SubscriptionId
-> Stripe (StripeList Subscription)
getSubscriptions
customerid
limit
startingAfter
endingBefore =
getSubscriptionsExpandable customerid limit
startingAfter endingBefore []
getSubscriptionsExpandable
:: CustomerId
-> Limit
-> StartingAfter SubscriptionId
-> EndingBefore SubscriptionId
-> ExpandParams
-> Stripe (StripeList Subscription)
getSubscriptionsExpandable
customerid
limit
startingAfter
endingBefore
expandParams = callAPI request
where request = StripeRequest GET url params
url = "customers" </> getCustomerId customerid </> "subscriptions"
params = getParams [
("limit", toText `fmap` limit )
, ("starting_after", (\(SubscriptionId x) -> x) `fmap` startingAfter)
, ("ending_before", (\(SubscriptionId x) -> x) `fmap` endingBefore)
] ++ toExpandable expandParams
updateSubscription
:: CustomerId
-> SubscriptionId
-> Maybe CouponId
-> MetaData
-> Stripe Subscription
updateSubscription
customerid
(SubscriptionId subscriptionid)
couponid
metadata = callAPI request
where request = StripeRequest POST url params
url = "customers" </> getCustomerId customerid </> "subscriptions" </> subscriptionid
params = toMetaData metadata ++ getParams [
("coupon", (\(CouponId x) -> x) `fmap` couponid)
]
cancelSubscription
:: CustomerId
-> SubscriptionId
-> Bool
-> Stripe Subscription
cancelSubscription
customerid
(SubscriptionId subscriptionid)
atPeriodEnd
= callAPI request
where request = StripeRequest DELETE url params
url = "customers" </> getCustomerId customerid </> "subscriptions" </> subscriptionid
params = getParams [ ("at_period_end", Just $ toText atPeriodEnd) ]