Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Collections API #3

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions lib/apis/collection/boletos.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
defmodule BancoBs2.Apis.Collection.Boletos do
@moduledoc """
Module to interact with Collection API.
"""

@base_url Application.get_env(:banco_bs2, :base_url)
@base_endpoint "/pj/forintegration/cobranca/v1/boletos"
@default_headers %{"Content-type": "application/json"}

alias BancoBs2.Entities.Client
alias BancoBs2.ApiError
alias BancoBs2.Entities.Boleto
alias HTTPoison.Response
alias HTTPoison.Error

import BancoBs2.Plugins.AuthHeaders

@doc """
Creates a Boleto. See available parameters to pass
[here](https://devs.bs2.com/manual/cobranca/#incluir-boleto-de-cobran%C3%A7a)

If succesful, returns {:ok, %Boleto{}}, else {:error, %ApiError{}}.
"""

@spec create(Client.t(), map) :: {atom, Boleto.t() | ApiError.t()}
def create(client, create_params) do
case HTTPoison.post(
"#{@base_url}#{@base_endpoint}/simplificado",
Jason.encode!(create_params),
auth_headers(client, @default_headers)
) do
{:ok, %Response{status_code: 200, body: body}} ->
Jason.decode!(body)

{:ok, response} ->
handle_error(response)

{:error, %Error{reason: reason}} ->
{:error, %ApiError{message: "Connection error occured: #{reason}"}}
end
end

defp handle_error(response) do
"came here"
end
end
66 changes: 66 additions & 0 deletions lib/entities/boleto.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
defmodule BancoBs2.Entities.Boleto do
@moduledoc """
Struct holding information for Boleto
slips.
"""

alias BancoBs2.Entities.Desconto
alias BancoBs2.Entities.Mensagem
alias BancoBs2.Entities.Multa
alias BancoBs2.Entities.Sacado
alias BancoBs2.Entities.SacadorAvalista

defstruct id: nil,
sacado: nil,
status: nil,
nosso_numero: nil,
codigo_de_barra: nil,
linha_digitavel: nil,
seu_numero: nil,
cliente_id: nil,
sacador_avalista: nil,
vencimento: nil,
valor: nil,
canal: nil,
multa: nil,
desconto: nil,
mensagem: nil

@typedoc """
Type that represents `Boleto` struct with:

id: String.t(),
sacado: Sacado.t(),
status: integer,
nosso_numero: integer,
codigo_de_barra: String.t(),
linha_digitavel: String.t(),
seu_numero: String.t(),
cliente_id: String.t(),
sacador_avalista: SacadorAvalista.t(),
vencimento: String.t(),
valor: integer,
canal: String.t(),
multa: Multa.t(),
desconto: Desconto.t(),
mensagem: Mensagem.t()
"""

@type t :: %BancoBs2.Entities.Boleto{
id: String.t(),
sacado: Sacado.t(),
status: integer,
nosso_numero: integer,
codigo_de_barra: String.t(),
linha_digitavel: String.t(),
seu_numero: String.t(),
cliente_id: String.t(),
sacador_avalista: SacadorAvalista.t(),
vencimento: String.t(),
valor: integer,
canal: String.t(),
multa: Multa.t(),
desconto: Desconto.t(),
mensagem: Mensagem.t()
}
end
2 changes: 1 addition & 1 deletion lib/entities/client.ex
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
defmodule BancoBs2.Entities.Client do
@moduledoc """
`Client` struct holding `OAuth` information.
Struct holding `OAuth` information.

Filled after successful authentication.
To be used in further API requests.
Expand Down
27 changes: 27 additions & 0 deletions lib/entities/desconto.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
defmodule BancoBs2.Entities.Desconto do
@moduledoc """
Struct representing Desconto. Usually part
of a Boleto entity.
"""

defstruct percentual: nil,
valorFixo: nil,
valorDiario: nil,
limite: nil

@typedoc """
Type that represents Desconto with:

percentual: float(),
valorFixo: float(),
valorDiario: float(),
limite: String.t()
"""

@type t :: %BancoBs2.Entities.Desconto{
percentual: float(),
valorFixo: float(),
valorDiario: float(),
limite: String.t()
}
end
35 changes: 35 additions & 0 deletions lib/entities/endreco.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
defmodule BancoBs2.Entities.Endreco do
@moduledoc """
Entity representing Endreco.
"""

defstruct cep: nil,
estado: nil,
cidade: nil,
bairro: nil,
logradouro: nil,
numero: nil,
complemento: nil

@typedoc """
Type that represents `Endreco` with:

cep: String.t(),
estado: String.t(),
cidade: String.t(),
bairro: String.t(),
logradouro: String.t(),
numero: String.t(),
complemento: String.t()
"""

@type t :: %BancoBs2.Entities.Endreco{
cep: String.t(),
estado: String.t(),
cidade: String.t(),
bairro: String.t(),
logradouro: String.t(),
numero: String.t(),
complemento: String.t()
}
end
27 changes: 27 additions & 0 deletions lib/entities/mensagem.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
defmodule BancoBs2.Entities.Mensagem do
@moduledoc """
Struct representing Mensagem. Usually part
of a Boleto entity.
"""

defstruct linha1: nil,
linha2: nil,
linha3: nil,
linha4: nil

@typedoc """
Type that represents Desconto with:

linha1: String.t(),
linha2: String.t(),
linha3: String.t(),
linha4: String.t()
"""

@type t :: %BancoBs2.Entities.Mensagem{
linha1: String.t(),
linha2: String.t(),
linha3: String.t(),
linha4: String.t()
}
end
24 changes: 24 additions & 0 deletions lib/entities/multa.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
defmodule BancoBs2.Entities.Multa do
@moduledoc """
Struct representing Multa. Usually part
of a Boleto entity.
"""

defstruct valor: nil,
data: nil,
juros: nil

@typedoc """
Type that represents Multa with:

valor: float(),
data: String.t(),
juros: float()
"""

@type t :: %BancoBs2.Entities.Multa{
valor: float(),
data: String.t(),
juros: float()
}
end
34 changes: 34 additions & 0 deletions lib/entities/sacado.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
defmodule BancoBs2.Entities.Sacado do
@moduledoc """
Struct representing Sacado. Usually part
of a Boleto entity.
"""

alias BancoBs2.Entities.Endreco

defstruct email: nil,
telefone: nil,
tipo: nil,
documento: nil,
nome: nil,
endreco: nil

@typedoc """
Type that represents `Sacado` with:
email: String.t(),
telefone: String.t(),
tipo: integer,
documento: String.t(),
nome: String.t(),
endreco: Endreco.t()
"""

@type t :: %BancoBs2.Entities.Sacado{
email: String.t(),
telefone: String.t(),
tipo: integer,
documento: String.t(),
nome: String.t(),
endreco: Endreco.t()
}
end
29 changes: 29 additions & 0 deletions lib/entities/sacador_avalista.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
defmodule BancoBs2.Entities.SacadorAvalista do
@moduledoc """
Struct representing SacadorAvalista. Usually
part of a Boleto entity.
"""

alias BancoBs2.Entities.Endreco

defstruct tipo: nil,
documento: nil,
nome: nil,
endreco: nil

@typedoc """
Type that represents SacadorAvalista with:

tipo: integer,
documento: String.t(),
nome: String.t(),
endreco: Endreco.t()
"""

@type t :: %BancoBs2.Entities.SacadorAvalista{
tipo: integer,
documento: String.t(),
nome: String.t(),
endreco: Endreco.t()
}
end
21 changes: 21 additions & 0 deletions lib/plugins/auth_headers.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
defmodule BancoBs2.Plugins.AuthHeaders do
@moduledoc """
Contains shared functions to be used in API modules.
"""

@doc """
Generates HTTP headers with including access_token
from %Client{} entity.

Returns %{} with necessary headers.
"""

@spec auth_headers(Client.t(), map) :: map
def auth_headers(%{token_type: token_type, access_token: access_token}, default_headers \\ %{}) do
Map.put(
default_headers,
:Authorization,
token_type <> " " <> access_token
)
end
end