defmodule ApiBrasil.Data.Bulk do @moduledoc """ Execução em lote: `POST /bulk/direct/{action}` e `POST /bulk/queue/{action}`. `direct/4` executa o lote de forma síncrona e `queue/4` apenas o enfileira, devolvendo o protocolo do processamento. {:ok, _resultado} = ApiBrasil.Data.Bulk.direct(client, "cpf", %{"items" => items}) {:ok, _protocolo} = ApiBrasil.Data.Bulk.queue(client, "cpf", %{"items" => items}) """ use ApiBrasil.Core.Service @doc "Executa um lote de forma síncrona: `POST /bulk/direct/{action}`." @spec direct(Client.t(), String.t(), term(), keyword()) :: result() def direct(client, action, body \\ nil, opts \\ []) do Service.post(client, "bulk/direct/#{Service.encode_path(action)}", body, opts) end @doc "Como `direct/4`, mas levanta `ApiBrasil.Core.Error` em caso de falha." @spec direct!(Client.t(), String.t(), term(), keyword()) :: map() def direct!(client, action, body \\ nil, opts \\ []) do Service.unwrap!(direct(client, action, body, opts)) end @doc "Enfileira um lote: `POST /bulk/queue/{action}`." @spec queue(Client.t(), String.t(), term(), keyword()) :: result() def queue(client, action, body \\ nil, opts \\ []) do Service.post(client, "bulk/queue/#{Service.encode_path(action)}", body, opts) end @doc "Como `queue/4`, mas levanta `ApiBrasil.Core.Error` em caso de falha." @spec queue!(Client.t(), String.t(), term(), keyword()) :: map() def queue!(client, action, body \\ nil, opts \\ []) do Service.unwrap!(queue(client, action, body, opts)) end end