{-# LANGUAGE OverloadedStrings #-}
{-|
[WARNING]: This implementation is currently untested! Due to lack of access to the Mandates API.
-}
module Mollie.API.Mandates
( mandatesPath
, newMandate
, createCustomerMandate
, getCustomerMandate
, getCustomerMandates
-- Re-export relevant types
, PaymentMethod (..)
, NewMandate (..)
, MandateStatus (..)
, MandateDetails (..)
, Mandate (..)
, 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
{-|
Mandates resource's path, relative to API's versioned customer resource url.
-}
mandatesPath :: Text.Text
mandatesPath = "mandates"
newMandate :: PaymentMethod
-> Text.Text -- ^ consumerName
-> Text.Text -- ^ consumerAccount
-> NewMandate
newMandate method consumerName consumerAccount = NewMandate
{ newMandate_method = method
, newMandate_consumerName = consumerName
, newMandate_consumerAccount = consumerAccount
, newMandate_consumerBic = Nothing
, newMandate_signatureDate = Nothing
, newMandate_mandateReference = Nothing
}
{-|
Handler to create a new mandate for a specific customer.
For more information see: https://www.mollie.com/en/docs/reference/mandates/create.
-}
createCustomerMandate :: Text.Text -- ^ customerId
-> NewMandate -> Mollie (Either ResponseError Mandate)
createCustomerMandate customerId newMandate = do
result <- send HTTP.methodPost path newMandate
return $ decodeResult result
where
path = Text.intercalate "/" [customersPath, customerId, mandatesPath]
{-|
Handler to get a mandate by its identifier from a specific customer.
For more information see: https://www.mollie.com/en/docs/reference/mandates/get.
-}
getCustomerMandate :: Text.Text -- ^ customerId
-> Text.Text -- ^ mandateId
-> Mollie (Either ResponseError Mandate)
getCustomerMandate customerId mandateId = get path
where
path = Text.intercalate "/" [customersPath, customerId, mandatesPath, mandateId]
{-|
Handler to get a list of mandates for a specific customer. Because the list endpoint is paginated this handler requires an offset and a count. The maximum amount of mandates returned with a single call is 250.
For more information see: https://www.mollie.com/en/docs/reference/mandates/list.
-}
getCustomerMandates :: Text.Text -- ^ customerId
-> Int -- ^ offset
-> Int -- ^ count
-> Mollie (Either ResponseError (List Mandate))
getCustomerMandates customerId offset count = get path
where
path = (Text.intercalate "/" [customersPath, customerId, mandatesPath]) <> query
query = "?offset=" <> showT offset <> "&count=" <> showT count