defmodule Circlex.Emulator.State.RecipientState do
alias Circlex.Emulator.State
alias Circlex.Struct.Recipient
alias Circlex.Emulator.Logic.RecipientLogic
import State.Util
# TODO: Add active/inactive?
def all_recipients(filters \\ []) do
get_recipients_st(fn recipients -> recipients end, filters)
end
def get_recipient(id, filters \\ []) do
get_recipients_st(fn recipients -> RecipientLogic.get_recipient(recipients, id) end, filters)
end
def add_recipient(recipient) do
update_recipients_st(fn recipients -> RecipientLogic.add_recipient(recipients, recipient) end)
end
def update_recipient(recipient_id, f) do
update_recipients_st(fn recipients ->
RecipientLogic.update_recipient(recipients, recipient_id, f)
end)
end
def deserialize(st) do
%{st | recipients: Enum.map(st.recipients, &Recipient.deserialize/1)}
end
def serialize(st) do
%{st | recipients: Enum.map(st.recipients, &Recipient.serialize/1)}
end
def initial_state() do
%{recipients: []}
end
def new_recipient(address, chain, currency, description) do
{:ok,
%Recipient{
id: State.next(:uuid),
address: address,
chain: chain,
currency: currency,
description: description
}}
end
defp get_recipients_st(mfa_or_fn, filters) do
State.get_st(mfa_or_fn, [:recipients], &apply_filters(&1, filters))
end
defp update_recipients_st(mfa_or_fn, filters \\ []) do
State.update_st(mfa_or_fn, [:recipients], &apply_filters(&1, filters))
end
end