stripe-haskell-0.1.0.0: src/Web/Stripe/Coupon.hs
{-# LANGUAGE OverloadedStrings #-}
-------------------------------------------
-- |
-- Module : Web.Stripe.Coupon
-- Copyright : (c) David Johnson, 2014
-- Maintainer : djohnson.m@gmail.com
-- Stability : experimental
-- Portability : POSIX
--
-- < https:/\/\stripe.com/docs/api#coupons >
--
-- @
-- import Web.Stripe
-- import Web.Stripe.Coupon
--
-- main :: IO ()
-- main = do
-- let config = SecretKey "secret_key"
-- result <- createCoupon
-- (Just $ CouponId "$1 Off!")
-- Once
-- (Just $ AmountOff 1)
-- (Just USD)
-- Nothing
-- Nothing
-- Nothing
-- Nothing
-- []
-- case result of
-- Right coupon -> print coupon
-- Left stripeError -> print stripeError
-- @
module Web.Stripe.Coupon
( -- * API
createCoupon
, getCoupon
, getCoupons
, updateCoupon
, deleteCoupon
-- * Types
, Duration (..)
, AmountOff (..)
, CouponId (..)
, Coupon (..)
, Currency (..)
, DurationInMonths (..)
, MaxRedemptions (..)
, PercentOff (..)
, RedeemBy (..)
, StripeList (..)
, StripeDeleteResult (..)
) where
import Web.Stripe.Client.Internal (Method (POST, DELETE, GET), Stripe,
StripeRequest (..), callAPI, toMetaData,
getParams, toText, (</>), toTextLower)
import Web.Stripe.Types (AmountOff (..), Coupon (..),
CouponId (..), Currency (..),
Duration(..), DurationInMonths (..),
EndingBefore, Limit, MetaData,
MaxRedemptions (..),
PercentOff (..), RedeemBy (..),
StartingAfter,
StripeDeleteResult (..),
StripeList (..))
------------------------------------------------------------------------------
-- | `Coupon` creation
createCoupon
:: Maybe CouponId -- ^ Name of the `Coupon`
-> Duration -- ^ `Duration` of the `Coupon`
-> Maybe AmountOff -- ^ `AmountOff` of the `Coupon`
-> Maybe Currency -- ^ `Currency` of the `Coupon`
-> Maybe DurationInMonths -- ^ `DurationInMonths` of the `Coupon`
-> Maybe MaxRedemptions -- ^ `MaxRedemptions` of the `Coupon`
-> Maybe PercentOff -- ^ `PercentOff` of the `Coupon`
-> Maybe RedeemBy -- ^ `RedeemBy` date of the `Coupon`
-> MetaData -- ^ `MetaData` of the `Coupon`
-> Stripe Coupon
createCoupon
couponid
duration
amountOff
currency
durationInMonths
maxRedemptions
percentOff
redeemBy
metadata = callAPI request
where request = StripeRequest POST url params
url = "coupons"
params = toMetaData metadata ++ getParams [
("id", (\(CouponId x) -> x) `fmap` couponid )
, ("duration", toText `fmap` Just duration )
, ("amount_off", (\(AmountOff x) -> toText x) `fmap` amountOff )
, ("currency", toTextLower `fmap` currency)
, ("duration_in_months", (\(DurationInMonths x) -> toText x) `fmap` durationInMonths )
, ("max_redemptions", (\(MaxRedemptions x) -> toText x) `fmap` maxRedemptions )
, ("percent_off", (\(PercentOff x) -> toText x) `fmap` percentOff )
, ("redeem_by", (\(RedeemBy x) -> toText x) `fmap` redeemBy )
]
------------------------------------------------------------------------------
-- | Retrieve a `Coupon` by `CouponId`
getCoupon
:: CouponId -- ^ `CouponId` of the `Coupon` to retrieve
-> Stripe Coupon
getCoupon
(CouponId couponid) = callAPI request
where request = StripeRequest GET url params
url = "coupons" </> couponid
params = []
------------------------------------------------------------------------------
-- | Retrieve a list of 'Coupon's
getCoupons
:: Maybe Limit -- ^ Defaults to 10 if `Nothing` specified
-> StartingAfter CouponId -- ^ Paginate starting after the following `CouponId`
-> EndingBefore CouponId -- ^ Paginate ending before the following `CouponId`
-> Stripe (StripeList Coupon)
getCoupons
limit
startingAfter
endingBefore
= callAPI request
where request = StripeRequest GET url params
url = "coupons"
params = getParams [
("limit", toText `fmap` limit )
, ("starting_after", (\(CouponId x) -> x) `fmap` startingAfter)
, ("ending_before", (\(CouponId x) -> x) `fmap` endingBefore)
]
------------------------------------------------------------------------------
-- | Update 'Coupon'
updateCoupon
:: CouponId -- ^ The `CoupondId` of the `Coupon` to update
-> MetaData -- ^ The `MetaData` for the `Coupon`
-> Stripe Coupon
updateCoupon
(CouponId couponid)
metadata = callAPI request
where request = StripeRequest POST url params
url = "coupons" </> couponid
params = toMetaData metadata
------------------------------------------------------------------------------
-- | Delete 'Coupon" by 'CouponId'
deleteCoupon
:: CouponId -- ^ The `CoupondId` of the `Coupon` to update
-> Stripe StripeDeleteResult
deleteCoupon
(CouponId couponid) = callAPI request
where request = StripeRequest DELETE url params
url = "coupons" </> couponid
params = []