mollie-api-haskell-2.0.0.0: src/Mollie/API/Subscriptions.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeOperators #-}
module Mollie.API.Subscriptions
( SubscriptionAPI
, newSubscription
, createCustomerSubscription
, getCustomerSubscription
, getCustomerSubscriptions
, getCustomerSubscriptionsPaginated
, cancelCustomerSubscription
, getSubscriptionPayments
, getSubscriptionPaymentsPaginated
) where
import Control.Lens ((&), (.~))
import Data.Default (Default, def)
import qualified Data.Text as Text
import GHC.Generics (Generic)
import Mollie.API.Internal (HalJSON)
import Mollie.API.Types
import Servant.API
import Servant.API.Generic
{-|
Servant API definition for Mollie subscriptions API https://www.mollie.com/en/docs/reference/subscriptions/get.
-}
data SubscriptionAPI route = SubscriptionAPI
{ getCustomerSubscriptionsPaginated :: route :- "customers"
:> Capture "customerId" CustomerId
:> "subscriptions"
:> QueryParam "limit" Int
:> QueryParam "from" SubscriptionId
:> Get '[HalJSON] (List Subscription)
-- ^Handler to get a paginated list of customers. Offset the results by passing the last customer ID in the `from` query param. The customer with this ID is included in the result set as well. See https://www.mollie.com/en/docs/reference/subscriptions/list
--
-- Example for fetching the last subscription of customer with id "cst_exampleid":
--
-- @
-- import Mollie.API
-- import Mollie.API.Subscriptions
--
-- env <- createEnv "test_mollieapikeyexample"
-- let customerSubscriptionsResult = runMollie env (getCustomerSubscriptionsPaginated subscriptionClient "cst_exampleid" (Just 1) Nothing)
-- @
, getCustomerSubscriptions :: route :- "customers"
:> Capture "customerId" CustomerId
:> "subscriptions"
:> Get '[HalJSON] (List Subscription)
-- ^Handler to get a paginated list of subscriptions for a specific customer. Applies default pagination for newest 250 subscriptions. See https://www.mollie.com/en/docs/reference/subscriptions/list
, createCustomerSubscription :: route :- "customers"
:> Capture "customerId" CustomerId
:> "subscriptions"
:> ReqBody '[JSON] NewSubscription
:> Post '[HalJSON] Subscription
-- ^Handler to create a new subscription for a specific customer. See https://www.mollie.com/en/docs/reference/subscriptions/create
, getCustomerSubscription :: route :- "customers"
:> Capture "customerId" CustomerId
:> "subscriptions"
:> Capture "id" SubscriptionId
:> Get '[HalJSON] Subscription
-- ^Handler to get a subscription by its identifier from a specific customer. See https://www.mollie.com/en/docs/reference/subscriptions/get
, cancelCustomerSubscription :: route :- "customers"
:> Capture "customerId" CustomerId
:> "subscriptions"
:> Capture "id" SubscriptionId
:> DeleteNoContent '[HalJSON] NoContent
-- ^Handler to cancel a subscription by its identifier for a specific customer. See https://www.mollie.com/en/docs/reference/subscriptions/delete
, getSubscriptionPaymentsPaginated :: route :- "customers"
:> Capture "customerId" CustomerId
:> "subscriptions"
:> Capture "id" SubscriptionId
:> "payments"
:> QueryParam "limit" Int
:> QueryParam "from" PaymentId
:> Get '[HalJSON] (List Payment)
-- ^Handler to get a paginated list of payments of a specific subscription. Offset the result set to the payment with `from` query param. The payment with this ID is included in the result set as well. See https://docs.mollie.com/reference/v2/subscriptions-api/list-subscriptions-payments
--
-- Example for fetching the last 5 payments of a subscription with 'CustomerId' "cst_exampleid" and 'SubscriptionId' "sub_exampleid":
--
-- @
-- import Mollie.API
-- import Mollie.API.Subscriptions
--
-- env <- createEnv "test_mollieapikeyexample"
-- let subscriptionPaymentsResult = runMollie env (getSubscriptionPaymentsPaginated subscriptionClient "cst_exampleid" "sub_exampleid" (Just 5) Nothing)
-- @
, getSubscriptionPayments :: route :- "customers"
:> Capture "customerId" CustomerId
:> "subscriptions"
:> Capture "id" SubscriptionId
:> "payments"
:> Get '[HalJSON] (List Payment)
-- ^Handler to get a paginated list of payments of a specific subscription. Applies default pagination for newest 250 payments. See https://docs.mollie.com/reference/v2/subscriptions-api/list-subscriptions-payments
} deriving Generic
{-|
Helper to create a minimal new subscription. Defaults to an ongoing subscription.
The interval is in human readable format and support the following values:
`1 day`/`n days`, `1 week`/`n weeks`, `1 month`/`n months` where n > 1.
-}
newSubscription :: Double -- ^ _amount
-> Text.Text -- ^ _interval
-> Text.Text -- ^ _description
-> NewSubscription
newSubscription _amount _interval _description =
def
& amount .~ (defaultAmount _amount)
& interval .~ _interval
& description .~ _description