Current section
Files
Jump to
Current section
Files
lib/structs/entities_search_result.ex
defmodule Manganese.EntityKit.Structs.EntitiesSearchResult do
alias Manganese.EntityKit.Structs
@typedoc """
"""
@type t :: %Structs.EntitiesSearchResult{
entities: Structs.EntitiesCollection.t,
entity_ids: [ integer ],
parameters: term,
count: non_neg_integer
}
defstruct [
entities: Structs.EntitiesCollection.new,
entity_ids: [],
parameters: nil,
count: 0
]
# Utilities
@doc """
"""
@spec new :: t
def new, do: %Structs.EntitiesSearchResult{}
@doc """
"""
@spec put_entity(t, atom, term) :: t
def put_entity(search_result, entity_type, entity) do
entity_ids =
(search_result.entity_ids ++ [ entity.id ])
|> Enum.uniq
%{
search_result |
entities:
search_result.entities
|> Structs.EntitiesCollection.put_entity(entity_type, entity),
entity_ids: entity_ids,
count: max(search_result.count, length(entity_ids))
}
end
@doc """
"""
@spec put_entities(t, atom, [ term ]) :: t
def put_entities(search_result, entity_type, entities) do
entity_ids =
(
search_result.entity_ids
++
entities
|> Enum.map(fn entity -> entity.id end)
)
|> Enum.uniq
%{
search_result |
entities:
search_result.entities
|> Structs.EntitiesCollection.put_entities(entity_type, entities),
entity_ids: entity_ids,
count: max(search_result.count, length(entity_ids))
}
end
@doc """
"""
def put_parameters(search_result, parameters) do
%{ search_result | parameters: parameters }
end
@doc """
"""
def put_count(search_result, count) do
%{ search_result | count: count }
end
end