defmodule Circlex.Emulator.State.SubscriptionState do require Logger import Circlex.Emulator.State.Util alias Circlex.Emulator.State alias Circlex.Struct.Subscription alias Circlex.Emulator.Logic.SubscriptionLogic def all_subscriptions(filters \\ []) do get_subscriptions_st(fn subscriptions -> subscriptions end, filters) end def get_subscription(id, filters \\ []) do get_subscriptions_st( fn subscriptions -> SubscriptionLogic.get_subscription(subscriptions, id) end, filters ) end def add_subscription(subscription) do update_subscriptions_st(fn subscriptions -> SubscriptionLogic.add_subscription(subscriptions, subscription) end) end def update_subscription(subscription_id, f) do update_subscriptions_st(fn subscriptions -> SubscriptionLogic.update_subscription(subscriptions, subscription_id, f) end) end def remove_subscription(subscription_id) do update_subscriptions_st(fn subscriptions -> SubscriptionLogic.remove_subscription(subscriptions, subscription_id) end) end def deserialize(st) do %{st | subscriptions: Enum.map(st.subscriptions, &Subscription.deserialize/1)} end def serialize(st) do %{st | subscriptions: Enum.map(st.subscriptions, &Subscription.serialize/1)} end def initial_state() do %{subscriptions: []} end def new_subscription(endpoint) do {:ok, %Subscription{ id: State.next(:uuid), endpoint: endpoint, subscription_details: [] }} end defp get_subscriptions_st(mfa_or_fn, filters \\ []) do State.get_st(mfa_or_fn, [:subscriptions], &apply_filters(&1, filters)) end defp update_subscriptions_st(mfa_or_fn, filters \\ []) do State.update_st(mfa_or_fn, [:subscriptions], &apply_filters(&1, filters)) end end