Current section

Files

Jump to
conekta lib customers.ex
Raw

lib/customers.ex

defmodule Conekta.Customers do
@moduledoc """
Functions for retrieving and managing information about clients.
We can create, update, find, delete and get all customers:
Endpoint: https://api.conekta.io/customers
"""
alias Conekta.Client
alias Conekta.Customer
alias Conekta.CustomersResponse
alias Conekta.Handler
alias Conekta.CustomerFindResponse
alias Conekta.CustomerDeleteResponse
alias Conekta.CustomerSubscriptionResponse
alias Conekta.CustomerPaymentSourcesResponse
alias Conekta.CustomerShippingContactsResponse
alias Conekta.CustomerCreatePaymentSourceResponse
alias Conekta.CustomerDeletePaymentSourceResponse
alias Conekta.CustomerCreateShippingContactResponse
alias Conekta.CustomerUpdateShippingContactResponse
alias Conekta.CustomerDeleteShippingContactResponse
@doc """
Get Conekta clients information.
[Conekta Documenation](https://developers.conekta.com/api?language=bash#customer)
**Method**: `GET`
Conekta.Customers.customers()
# => { :ok, %Conekta.CustomersResponse{}}
"""
def customers do
case Client.get_request("customers") do
{:ok, content} ->
body = Handler.handle_status_code(content)
{:ok, Poison.decode!(body, as: %CustomersResponse{})}
end
end
@doc """
Create a new Conekta client
[Conekta Documenation](https://developers.conekta.com/api?language=bash#create-customer)
**Method**: `POST`
Conekta.Customers.create(%Conekta.Customer{})
# => { :ok, %Conekta.Customer{}}
"""
def create(customer) do
case Client.post_request("customers", customer) do
{:ok, content} ->
body = Handler.handle_status_code(content)
{:ok, Poison.decode!(body, as: %Customer{})}
end
end
@doc """
Get Conekta client information identified by their unique conekta ID.
**Method**: `GET`
Conekta.Customers.find(client_id)
# => { :ok, %Conekta.CustomerFindResponse{}}
"""
def find(client_id) do
case Client.get_request("customers/" <> client_id) do
{:ok, content} ->
body = Handler.handle_status_code(content)
{:ok, Poison.decode!(body, as: %CustomerFindResponse{})}
end
end
@doc """
Delete a Conekta client by passing the unique conekta ID.
[Conekta Documenation](https://developers.conekta.com/api?language=bash#delete-customer)
**Method**: `DELETE`
Conekta.Customers.delete(client_id)
# => { :ok, %Conekta.CustomerDeleteResponse{}}
"""
def delete(client_id) do
case Client.delete_request("customers/" <> client_id) do
{:ok, content} ->
body = Handler.handle_status_code(content)
{:ok, Poison.decode!(body, as: %CustomerDeleteResponse{})}
end
end
@doc """
Update a Conekta client by passing a %Conekta.Customer{} struct with the new values
[Conekta Documenation](https://developers.conekta.com/api?language=bash#update-customer)
**Method**: `PUT`
Conekta.Customers.update(client_id, %Conekta.Customer{})
# => { :ok, %Conekta.CustomerDeleteResponse{}}
"""
def update(client_id, customer) do
case Client.put_request("customers/" <> client_id, customer) do
{:ok, content} ->
body = Handler.handle_status_code(content)
{:ok, Poison.decode!(body, as: %CustomerUpdateResponse{})}
end
end
@doc """
Get the client subscriptions
[Conekta Documenation](https://developers.conekta.com/api?language=node#subscription)
**Method**: `GET`
Conekta.Customers.subscription(client_id)
# => { :ok, %Conekta.CustomerSubscriptionResponse{}}
"""
def subscription(client_id) do
case Client.get_request("customers/" <> client_id <> "/subscription") do
{:ok, content} ->
body = Handler.handle_status_code(content)
{:ok, Poison.decode!(body, as: %CustomerSubscriptionResponse{})}
end
end
@doc """
Get the client payment sources
[Conekta Documenation](https://developers.conekta.com/api?language=node#payment-source)
**Method**: `GET`
Conekta.Customers.payment_sources(client_id)
# => { :ok, %Conekta.CustomerPaymentSourcesResponse{}}
"""
def payment_sources(client_id) do
case Client.get_request("customers/" <> client_id <> "/payment_sources") do
{:ok, content} ->
body = Handler.handle_status_code(content)
{:ok, Poison.decode!(body, as: %CustomerPaymentSourcesResponse{})}
end
end
@doc """
Create a new payment source
[Conekta Documenation](https://developers.conekta.com/api?language=bash#create-payment-source)
**Method**: `POST`
Conekta.Customers.create_payment_source(client_id, %Conekta.PaymentSource{})
# => { :ok, %Conekta.CustomerCreatePaymentSourceResponse{}}
"""
def create_payment_source(client_id, payment_source) do
case Client.post_request("customers/" <> client_id <> "/payment_sources", payment_source) do
{:ok, content} ->
body = Handler.handle_status_code(content)
{:ok, Poison.decode!(body, as: %CustomerCreatePaymentSourceResponse{})}
end
end
@doc """
Delete a payment source from a client
[Conekta Documenation](https://developers.conekta.com/api?language=bash#delete-payment-source)
**Method**: `DELETE`
Conekta.Customers.delete_payment_source(client_id, payment_source_id)
# => { :ok, %Conekta.CustomerDeletePaymentSourceResponse{}}
"""
def delete_payment_source(client_id, payment_source_id) do
case Client.delete_request("customers/" <> client_id <> "/payment_sources/" <> payment_source_id) do
{:ok, content} ->
body = Handler.handle_status_code(content)
{:ok, Poison.decode!(body, as: %CustomerDeletePaymentSourceResponse{})}
end
end
@doc """
Get the client shipping contacts
[Conekta Documenation](https://developers.conekta.com/api?language=node#shipping-contact)
**Method**: `GET`
Conekta.Customers.shipping_contacts(client_id)
# => { :ok, %Conekta.CustomerShippingContactsResponse{}}
"""
def shipping_contacts(client_id) do
case Client.get_request("customers/" <> client_id <> "/shipping_contacts") do
{:ok, content} ->
body = Handler.handle_status_code(content)
{:ok, Poison.decode!(body, as: %CustomerShippingContactsResponse{})}
end
end
@doc """
Create a new shipping contact for a customer
[Conekta Documenation](https://developers.conekta.com/api?language=bash#create-shipping-contact-customer)
**Method**: `POST`
Conekta.Customers.create_shipping_contact(client_id, %Conekta.ShippingContact{})
# => { :ok, %Conekta.CustomerCreateShippingContactResponse{}}
"""
def create_shipping_contact(client_id, shipping_contact) do
case Client.post_request("customers/" <> client_id <> "/shipping_contacts", shipping_contact) do
{:ok, content} ->
body = Handler.handle_status_code(content)
{:ok, Poison.decode!(body, as: %CustomerCreateShippingContactResponse{})}
end
end
@doc """
Update shipping contact for a customer
[Conekta Documenation](https://developers.conekta.com/api?language=bash#update-shipping-contact)
**Method**: `PUT`
Conekta.Customers.update_shipping_contact(client_id, shipping_contact_id, %Conekta.ShippingContact{})
# => { :ok, %Conekta.CustomerUpdateShippingContactResponse{}}
"""
def update_shipping_contact(client_id, shipping_contact_id, shipping_contact) do
case Client.put_request("customers/" <> client_id <> "/shipping_contacts/" <> shipping_contact_id, shipping_contact) do
{:ok, content} ->
body = Handler.handle_status_code(content)
{:ok, Poison.decode!(body, as: %CustomerUpdateShippingContactResponse{})}
end
end
@doc """
Delete a shipping contact from a customer
[Conekta Documenation](https://developers.conekta.com/api?language=bash#delete-shipping-contact)
**Method**: `DELETE`
Conekta.Customers.delete_shipping_contact(client_id, shipping_contact_id)
# => { :ok, %Conekta.CustomerDeleteShippingContactResponse{}}
"""
def delete_shipping_contact(client_id, shipping_contact_id) do
case Client.delete_request("customers/" <> client_id <> "/shipping_contacts/" <> shipping_contact_id) do
{:ok, content} ->
body = Handler.handle_status_code(content)
{:ok, Poison.decode!(body, as: %CustomerDeleteShippingContactResponse{})}
end
end
end