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
defimpl Manganese.EntityKit.Protocols.Reloadable, for: Manganese.EntityKit.Structs.EntitiesSearchResult do
alias Manganese.EntityKit.Protocols
alias Manganese.EntityKit.Structs
def reload(search_result, repo) do
%Structs.EntitiesSearchResult{
search_result |
entities:
search_result.entities
|> Protocols.Reloadable.reload(repo)
}
end
end
defimpl Manganese.EntityKit.Protocols.Serializable, for: Manganese.EntityKit.Structs.EntitiesSearchResult do
alias Manganese.EntityKit.Protocols
def serialize(search_result, serializer) do
%{
"entities" =>
search_result.entities
|> Protocols.Serializable.serialize(serializer),
"entity_ids" => search_result.entity_ids,
"parameters" => search_result.parameters,
"count" => search_result.count
}
end
end