Current section

Files

Jump to
ex_esdb src subscriptions_store.erl
Raw

src/subscriptions_store.erl

-module(subscriptions_store).
-export([get_subscription/2, put_subscription/2, delete_subscription/2, key/1]).
get_subscription(Store, Key) when is_binary(Key) ->
Path = [subscriptions, Key],
get_subscription(Store, Path);
get_subscription(Store, Path) when is_list(Path) ->
case khepri:get(Store, Path) of
{ok, Subscription} ->
Subscription;
{error, _Reason} ->
nil
end.
key(KeyT) when is_tuple(KeyT) ->
integer_to_binary(erlang:phash2(KeyT));
key(Subscription) when is_map(Subscription) ->
#{type := Type,
selector := Selector,
subscription_name := SubscriptionName} =
Subscription,
key({Type, Selector, SubscriptionName}).
put_subscription(Store, Subscription) ->
Key = key(Subscription),
case khepri:exists(Store, [subscriptions, Key]) of
true ->
ok;
false ->
ok = khepri:put(Store, [subscriptions, Key], Subscription),
ok
end.
delete_subscription(Store, Subscription) ->
Key = key(Subscription),
case khepri:exists(Store, [subscriptions, Key]) of
true ->
ok = khepri:delete(Store, [subscriptions, Key]),
ok;
false ->
ok
end.