Current section
Files
Jump to
Current section
Files
lib/boltx/response.ex
defmodule Bolty.Response do
import Bolty.BoltProtocol.ServerResponse
@type t :: %__MODULE__{
results: list,
fields: list,
records: list,
plan: map,
notifications: list,
stats: list | map,
profile: any,
type: String.t(),
bookmark: String.t()
}
@type key :: any
@type value :: any
@type acc :: any
@type element :: any
@doc """
Una estructura que representa una consulta Bolty.
* `statement` - La declaración de la consulta.
* `extra` - Datos adicionales asociados con la consulta.
"""
defstruct results: [],
fields: nil,
records: [],
plan: nil,
notifications: [],
stats: [],
profile: nil,
type: nil,
bookmark: nil
def new(
statement_result(
result_run: result_run,
result_pull: pull_result(records: records, success_data: success_data)
)
) do
fields = Map.get(result_run, "fields", [])
%__MODULE__{
results: create_results(fields, records),
fields: fields,
records: records,
plan: Map.get(success_data, "plan", nil),
notifications: Map.get(success_data, "notifications", []),
stats: Map.get(success_data, "stats", []),
profile: Map.get(success_data, "profile", nil),
type: Map.get(success_data, "type", nil),
bookmark: Map.get(success_data, "bookmark", nil)
}
end
def first(%__MODULE__{results: []}), do: nil
def first(%__MODULE__{results: [head | _tail]}), do: head
defp create_results(fields, records) do
records
|> Enum.map(fn recs -> Enum.zip(fields, recs) end)
|> Enum.map(fn data -> Enum.into(data, %{}) end)
end
end