Packages
livebook
0.19.7
0.19.8
0.19.7
0.19.6
0.19.5
0.19.4
0.19.3
0.19.2
0.19.1
0.19.0
0.18.6
0.18.5
0.18.4
0.18.3
0.18.2
0.18.1
0.18.0
0.17.3
0.17.2
0.17.1
0.17.0
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.14.0-rc.1
0.14.0-rc.0
0.13.3
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.3
0.2.2
0.2.1
0.2.0
0.1.2
0.1.1
0.1.0
Automate code & data workflows with interactive notebooks
Current section
Files
Jump to
Current section
Files
lib/livebook/users.ex
defmodule Livebook.Users do
alias Livebook.Users.User
@doc """
Returns an `%Ecto.Changeset{}` for tracking user changes.
"""
@spec change_user(User.t(), map()) :: Ecto.Changeset.t()
def change_user(%User{} = user, attrs \\ %{}) do
User.changeset(user, attrs)
end
@doc """
Updates a User from given changeset.
With success, notifies interested processes about user data change.
Otherwise, it will return an error tuple with changeset.
"""
@spec update_user(User.t(), map()) :: {:ok, User.t()} | {:error, Ecto.Changeset.t()}
def update_user(%User{} = user, attrs \\ %{}) do
changeset = User.changeset(user, attrs)
with {:ok, user} <- Ecto.Changeset.apply_action(changeset, :update) do
broadcast_change(user)
{:ok, user}
end
end
@doc """
Notifies interested processes about user data change.
Broadcasts `{:user_change, user}` message under the `"user:{id}"` topic.
"""
@spec broadcast_change(User.t()) :: :ok
def broadcast_change(%User{} = user) do
broadcast_user_message(user.id, {:user_change, user})
:ok
end
defp broadcast_user_message(user_id, message) do
Phoenix.PubSub.broadcast(Livebook.PubSub, "users:#{user_id}", message)
end
@doc """
Subscribes to updates in user information.
## Messages
* `{:user_change, user}`
"""
@spec subscribe(User.id()) :: :ok | {:error, term()}
def subscribe(user_id) do
Phoenix.PubSub.subscribe(Livebook.PubSub, "users:#{user_id}")
end
@doc """
Unsubscribes from `subscribe/1`.
"""
@spec unsubscribe(User.id()) :: :ok
def unsubscribe(user_id) do
Phoenix.PubSub.unsubscribe(Livebook.PubSub, "users:#{user_id}")
end
end