{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeOperators #-}
module Mollie.API.Mandates
( MandateAPI
, newMandate
, createCustomerMandate
, getCustomerMandate
, getCustomerMandates
, getCustomerMandatesPaginated
, revokeCustomerMandate
) where
import Control.Lens ((&), (.~))
import Data.Default (def)
import qualified Data.Text as Text
import GHC.Generics (Generic)
import Mollie.API.Helpers
import Mollie.API.Internal (HalJSON)
import Mollie.API.Types
import Servant.API
import Servant.API.Generic
newMandate :: PaymentMethod -- ^ _method
-> Text.Text -- ^ _consumerName
-> Text.Text -- ^ _consumerAccount
-> NewMandate
newMandate _method _consumerName _consumerAccount =
def
& method .~ _method
& consumerName .~ _consumerName
& consumerAccount .~ _consumerAccount
data MandateAPI route = MandateAPI
{ getCustomerMandatesPaginated :: route :- "customers"
:> Capture "customerId" CustomerId
:> "mandates"
:> QueryParam "limit" Int
:> QueryParam "from" MandateId
:> Get '[HalJSON] (List Mandate)
-- ^Handler to get a paginated list of mandates for a specific customer. Offset the results by passing the last mandate ID in the `from` query param. The mandate with this ID is included in the result set as well. See https://docs.mollie.com/reference/v2/mandates-api/list-mandates
--
-- Example for fetching the last mandate for a customer:
--
-- @
-- import Mollie.API
-- import Mollie.API.Mandates
--
-- env <- createEnv "test_mollieapikeyexample"
-- let customerMandatesResult = runMollie env (getCustomerMandatesPaginated customerClient "cst_exampleid" (Just 1) Nothing)
-- @
, getCustomerMandates :: route :- "customers"
:> Capture "customerId" CustomerId
:> "mandates"
:> Get '[HalJSON] (List Mandate)
-- ^Handler to get a paginated list of mandates for a specific customer. Applies default pagination for newest 250 customers. See https://docs.mollie.com/reference/v2/mandates-api/list-mandates
, createCustomerMandate :: route :- "customers"
:> Capture "customerId" CustomerId
:> "mandates"
:> ReqBody '[JSON] NewMandate
:> Post '[HalJSON] Mandate
-- ^Handler to create a new mandate for a specific customer. See https://docs.mollie.com/reference/v2/mandates-api/create-mandate
, getCustomerMandate :: route :- "customers"
:> Capture "customerId" CustomerId
:> "mandates"
:> Capture "id" MandateId
:> Get '[HalJSON] Mandate
-- ^Handler to get a mandate by its identifier for a specific customer. See https://docs.mollie.com/reference/v2/mandates-api/get-mandate
, revokeCustomerMandate :: route :- "customers"
:> Capture "customerId" CustomerId
:> "mandates"
:> Capture "mandateId" MandateId
:> DeleteNoContent '[HalJSON] NoContent
-- ^Handler to remove a mandate by its identifier for a specific customer. See https://docs.mollie.com/reference/v2/mandates-api/revoke-mandate
} deriving Generic