Packages

Seven Otters is a set of facilities (macroes, functions, modules, etc.) developed to create CQRS/ES solutions in Elixir on BEAM virtual machine.

Current section

Files

Jump to
seven lib seven aggregates.ex
Raw

lib/seven/aggregates.ex

defmodule Seven.Aggregates do
@moduledoc false
@spec get_aggregate(atom, String.t()) :: {:ok, pid}
def get_aggregate(handler, correlation_value_id) do
{key, name} = get_key(handler, correlation_value_id)
case Registry.lookup(:registry, key) do
[] -> handler.start_link(key, name: name)
[{pid, _key}] -> {:ok, pid}
_ -> raise("More values in registry for key #{key}")
end
end
@spec is_loaded(atom, String.t()) :: nil | pid
def is_loaded(handler, correlation_value_id) do
{key, _name} = get_key(handler, correlation_value_id)
case Registry.lookup(:registry, key) do
[] -> nil
[{pid, _key}] -> pid
_ -> raise("More values in registry for key #{key}")
end
end
defp get_key(handler, correlation_value_id) do
key = Atom.to_string(handler) <> "_" <> correlation_value_id
name = {:via, Registry, {:registry, key}}
{key, name}
end
end