{-# LANGUAGE OverloadedStrings #-}
module Mollie.API.Subscriptions
( subscriptionsPath
, newSubscription
, createCustomerSubscription
, getCustomerSubscription
, getCustomerSubscriptions
, cancelCustomerSubscription
, PaymentMethod (..)
, NewSubscription (..)
, SubscriptionStatus (..)
, SubscriptionLinks (..)
, Subscription (..)
, ListLinks (..)
, List (..)
, ResponseError (..)
) where
import Data.Monoid
import qualified Data.Text as Text
import Mollie.API.Customers
import Mollie.API.Internal
import Mollie.API.Types
import qualified Network.HTTP.Types as HTTP
subscriptionsPath :: Text.Text
subscriptionsPath = "subscriptions"
newSubscription :: Double
-> Text.Text
-> Text.Text
-> NewSubscription
newSubscription amount interval description = NewSubscription
{ newSubscription_amount = amount
, newSubscription_times = Nothing
, newSubscription_interval = interval
, newSubscription_description = description
, newSubscription_method = Nothing
, newSubscription_webhookUrl = Nothing
}
createCustomerSubscription :: Text.Text
-> NewSubscription -> Mollie (Either ResponseError Subscription)
createCustomerSubscription customerId newSubscription = do
result <- send HTTP.methodPost path newSubscription
return $ decodeResult result
where
path = Text.intercalate "/" [customersPath, customerId, subscriptionsPath]
getCustomerSubscription :: Text.Text
-> Text.Text
-> Mollie (Either ResponseError Subscription)
getCustomerSubscription customerId subscriptionId = get path
where
path = Text.intercalate "/" [customersPath, customerId, subscriptionsPath, subscriptionId]
getCustomerSubscriptions :: Text.Text
-> Int
-> Int
-> Mollie (Either ResponseError (List Subscription))
getCustomerSubscriptions customerId offset count = get path
where
path = (Text.intercalate "/" [customersPath, customerId, subscriptionsPath]) <> query
query = "?offset=" <> showT offset <> "&count=" <> showT count
cancelCustomerSubscription :: Text.Text
-> Text.Text
-> Mollie (Either ResponseError Subscription)
cancelCustomerSubscription customerId subscriptionId = do
result <- delete path
return $ decodeResult result
where
path = Text.intercalate "/" [customersPath, customerId, subscriptionsPath, subscriptionId]