defmodule StarkInfra.PixChargeback.Log do
alias __MODULE__, as: Log
alias StarkInfra.Utils.Rest
alias StarkInfra.Utils.API
alias StarkInfra.Utils.Check
alias StarkInfra.PixChargeback
alias StarkInfra.User.Project
alias StarkInfra.User.Organization
alias StarkInfra.Error
@moduledoc """
Groups PixChargeback.Log related functions
"""
@doc """
Every time a PixChargeback entity is modified, a corresponding PixChargeback.Log
is generated for the entity. This log is never generated by the user.
## Attributes:
- `:id` [string]: unique id returned when the log is created. ex: "5656565656565656"
- `:type` [string]: type of the PixChargeback event which triggered the log creation. ex: "created", "failed", "delivering", "delivered", "closed", "canceled"
- `:errors` [list of strings]: list of errors linked to this PixChargeback event
- `:chargeback` [PixChargeback]: PixChargeback entity to which the log refers to.
- `:created` [DateTime]: creation datetime for the log. ex: ~U[2020-3-10 10:30:0:0]
"""
@enforce_keys [
:id,
:type,
:errors,
:chargeback,
:created
]
defstruct [
:id,
:type,
:errors,
:chargeback,
:created
]
@type t() :: %__MODULE__{}
@doc """
Receive a single PixChargeback.Log struct previously created by the Stark Infra API by its id
## Parameters (required):
- `:id` [string]: struct unique id. ex: "5656565656565656"
## Options:
- `:user` [Organization/Project, default nil]: Organization or Project struct returned from StarkInfra.project(). Only necessary if default project or organization has not been set in configs.
## Return:
- PixChargeback.Log struct with updated attributes
"""
@spec get(
id: binary,
user: Project.t() | Organization.t() | nil
) ::
{:ok, Log.t()} |
{:error, [Error.t()]}
def get(id, options \\ []) do
Rest.get_id(resource(), id, options)
end
@doc """
Same as get(), but it will unwrap the error tuple and raise in case of errors.
"""
@spec get!(
id: binary,
user: Project.t() | Organization.t() | nil
) :: any
def get!(id, options \\ []) do
Rest.get_id!(resource(), id, options)
end
@doc """
Receive a stream of PixChargeback.Log structs previously created in the Stark Infra API
## Options:
- `:ids` [list of strings, default nil]: Log ids to filter PixChargeback Logs. ex: ["5656565656565656"]
- `:limit` [integer, default nil]: maximum number of structs to be retrieved. Unlimited if nil. ex: 35
- `:after` [Date or string, default nil]: date filter for structs created after specified date. ex: ~D[2020-03-10]
- `:before` [Date or string, default nil]: date filter for structs created before a specified date. ex: ~D[2020-03-10]
- `:types` [list of strings, default nil]: filter retrieved structs by types. ex: ["created", "failed", "delivering", "delivered", "closed", "canceled"]
- `:chargeback_ids` [list of strings, default nil]: list of PixChargeback IDs to filter retrieved objects. ex: ["5656565656565656", "4545454545454545"]
- `:user` [Organization/Project, default nil]: Organization or Project struct returned from StarkInfra.project(). Only necessary if default project or organization has not been set in configs.
## Return:
- stream of PixChargeback.Log structs with updated attributes
"""
@spec query(
ids: [binary] | nil,
limit: integer | nil,
after: Date.t() | binary | nil,
before: Date.t() | binary | nil,
types: [binary] | nil,
chargeback_ids: [binary] | nil,
user: Project.t() | Organization.t() | nil
) ::
{:ok, [Log.t()]} |
{:error, [Error.t()]}
def query(options \\ []) do
Rest.get_list(resource(), options)
end
@doc """
Same as query(), but it will unwrap the error tuple and raise in case of errors.
"""
@spec query!(
ids: [binary] | nil,
limit: integer | nil,
after: Date.t() | binary | nil,
before: Date.t() | binary | nil,
types: [binary] | nil,
chargeback_ids: [binary] | nil,
user: Project.t() | Organization.t() | nil
) :: any
def query!(options \\ []) do
Rest.get_list!(resource(), options)
end
@doc """
Receive a list of up to 100 PixChargeback.Log structs previously created in the Stark Infra API and the cursor to the next page.
Use this function instead of query if you want to manually page your chargebacks.
## Options:
- `:cursor` [string, default nil]: cursor returned on the previous page function call
- `:ids` [list of strings, default nil]: Log ids to filter PixChargeback Logs. ex: ["5656565656565656"]
- `:limit` [integer, default 100]: maximum number of structs to be retrieved. Max = 100. ex: 35
- `:after` [Date or string, default nil]: date filter for structs created after a specified date. ex: ~D[2020-03-10]
- `:before` [Date or string, default nil]: date filter for structs created before a specified date. ex: ~D[2020-03-10]
- `:types` [list of strings, default nil]: filter retrieved structs by types. ex: ["created", "failed", "delivering", "delivered", "closed", "canceled"]
- `:chargeback_ids` [list of strings, default nil]: list of PixChargeback IDs to filter retrieved objects. ex: ["5656565656565656", "4545454545454545"]
- `:user` [Organization/Project, default nil]: Organization or Project struct returned from StarkInfra.project(). Only necessary if default project or organization has not been set in configs.
## Return:
- list of PixChargeback.Log structs with updated attributes
- cursor to retrieve the next page of PixChargeback.Log objects
"""
@spec page(
cursor: binary | nil,
ids: [binary] | nil,
limit: integer | nil,
after: Date.t() | binary | nil,
before: Date.t() | binary | nil,
types: [binary] | nil,
chargeback_ids: [binary] | nil,
user: Project.t() | Organization.t() | nil
) ::
{:ok, [Log.t()], binary} |
{:error, [Error.t()]}
def page(options \\ []) do
Rest.get_page(resource(), options)
end
@doc """
Same as page(), but it will unwrap the error tuple and raise in case of errors.
"""
@spec page!(
cursor: binary | nil,
ids: [binary] | nil,
limit: integer | nil,
after: Date.t() | binary | nil,
before: Date.t() | binary | nil,
types: [binary] | nil,
chargeback_ids: [binary] | nil,
user: Project.t() | Organization.t() | nil
) :: any
def page!(options \\ []) do
Rest.get_page!(resource(), options)
end
@doc false
def resource() do
{
"PixChargebackLog",
&resource_maker/1
}
end
@doc false
def resource_maker(json) do
%Log{
id: json[:id],
type: json[:type],
errors: json[:errors],
chargeback: json[:chargeback] |> API.from_api_json(&PixChargeback.resource_maker/1),
created: json[:created] |> Check.datetime(),
}
end
end