stripe-core-2.0.0: src/Web/Stripe/Plan.hs
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeFamilies #-}
-------------------------------------------
-- |
-- Module : Web.Stripe.Plan
-- Copyright : (c) David Johnson, 2014
-- Maintainer : djohnson.m@gmail.com
-- Stability : experimental
-- Portability : POSIX
--
-- < https:/\/\stripe.com/docs/api#plans >
--
-- @
-- {-\# LANGUAGE OverloadedStrings \#-}
-- import Web.Stripe
-- import Web.Stripe.Plan
--
-- main :: IO ()
-- main = do
-- let config = StripeConfig (StripeKey "secret_key")
-- result <- stripe config $ do
-- createPlan (PlanId "free plan")
-- (Amount 0)
-- USD
-- Month
-- (PlanName "a sample free plan")
-- case result of
-- Right plan -> print plan
-- Left stripeError -> print stripeError
-- @
module Web.Stripe.Plan
( -- * API
CreatePlan
, createPlan
, GetPlan
, getPlan
, UpdatePlan
, updatePlan
, DeletePlan
, deletePlan
, GetPlans
, getPlans
-- * Types
, Amount (..)
, Currency (..)
, EndingBefore (..)
, Interval (..)
, IntervalCount (..)
, Limit (..)
, MetaData (..)
, Plan (..)
, PlanId (..)
, PlanName (..)
, StartingAfter (..)
, StatementDescription(..)
, StripeDeleteResult (..)
, StripeList (..)
, TrialPeriodDays (..)
) where
import Data.Text (Text)
import Web.Stripe.StripeRequest (Method (GET, POST, DELETE), Param(..),
StripeHasParam, StripeRequest (..),
StripeReturn, ToStripeParam(..),
mkStripeRequest)
import Web.Stripe.Types (PlanId (..) , Plan (..), PlanName(..),
Interval (..), StripeList(..),
IntervalCount (..), TrialPeriodDays (..),
Limit(..), StartingAfter(..),
EndingBefore(..), StripeDeleteResult(..),
Currency (..), Amount(..),
StatementDescription(..), MetaData(..))
import Web.Stripe.Util ((</>))
------------------------------------------------------------------------------
-- | Create a `Plan`
createPlan
:: PlanId -- ^ Unique string used to identify `Plan`
-> Amount -- ^ Positive integer in cents representing how much to charge on a recurring basis
-> Currency -- ^ `Currency` of `Plan`
-> Interval -- ^ Billing Frequency (i.e. `Day`, `Week` or `Month`)
-> PlanName -- ^ Name of `Plan` to be displayed on `Invoice`s
-> StripeRequest CreatePlan
createPlan
(PlanId planid)
amount
currency
interval
name = request
where request = mkStripeRequest POST url params
url = "plans"
params = toStripeParam (Param ("id" :: Text, planid)) $
toStripeParam amount $
toStripeParam currency $
toStripeParam interval $
toStripeParam name $
[]
data CreatePlan
type instance StripeReturn CreatePlan = Plan
instance StripeHasParam CreatePlan IntervalCount
instance StripeHasParam CreatePlan TrialPeriodDays
instance StripeHasParam CreatePlan MetaData
instance StripeHasParam CreatePlan StatementDescription
------------------------------------------------------------------------------
-- | Retrieve a `Plan`
getPlan
:: PlanId -- ^ The ID of the plan to retrieve
-> StripeRequest GetPlan
getPlan
(PlanId planid) = request
where request = mkStripeRequest GET url params
url = "plans" </> planid
params = []
data GetPlan
type instance StripeReturn GetPlan = Plan
------------------------------------------------------------------------------
-- | Update a `Plan`
updatePlan
:: PlanId -- ^ The ID of the `Plan` to update
-> StripeRequest UpdatePlan
updatePlan
(PlanId planid)
= request
where request = mkStripeRequest POST url params
url = "plans" </> planid
params = []
data UpdatePlan
type instance StripeReturn UpdatePlan = Plan
instance StripeHasParam UpdatePlan PlanName
instance StripeHasParam UpdatePlan MetaData
instance StripeHasParam UpdatePlan StatementDescription
------------------------------------------------------------------------------
-- | Delete a `Plan`
deletePlan
:: PlanId -- ^ The ID of the `Plan` to delete
-> StripeRequest DeletePlan
deletePlan
(PlanId planid) = request
where request = mkStripeRequest DELETE url params
url = "plans" </> planid
params = []
data DeletePlan
type instance StripeReturn DeletePlan = StripeDeleteResult
------------------------------------------------------------------------------
-- | Retrieve all `Plan`s
getPlans :: StripeRequest GetPlans
getPlans = request
where request = mkStripeRequest GET url params
url = "plans"
params = []
data GetPlans
type instance StripeReturn GetPlans = (StripeList Plan)
instance StripeHasParam GetPlans (EndingBefore PlanId)
instance StripeHasParam GetPlans Limit
instance StripeHasParam GetPlans (StartingAfter PlanId)