defmodule Rivet.Ident.User.Cache do
@moduledoc """
Used by websockets token authentication. Very short term cache to efficiently
load ~30 websockets all at once for a single dashboard.
"""
use Rivet.Utils.LazyCache
@persist_for 30_000
alias Rivet.Ident
def get_user(id) do
case lookup(id) do
[{_, user, _}] ->
{:ok, user}
_no_cache ->
with {:ok, user} <- Ident.User.one(id: id) do
Ident.User.Lib.get_authz(user) |> persist
end
end
end
def persist(%Ident.User{} = user) do
insert(user.id, user, @persist_for)
{:ok, user}
end
end