Use a more scoped changeset on teams hub update (#2328)

This commit is contained in:
Jonatan Kłosko 2023-11-08 12:19:54 +01:00 committed by GitHub
parent 07f1c34fab
commit 90c3cfe3a7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 14 deletions

View file

@ -56,6 +56,8 @@ defmodule Livebook.Hubs.Team do
hub_emoji
)a
@editable_fields ~w(hub_emoji)a
@doc """
Initializes a new Team hub.
"""
@ -71,21 +73,19 @@ defmodule Livebook.Hubs.Team do
}
end
@doc """
Returns an `%Ecto.Changeset{}` for tracking hub changes.
"""
@spec change_hub(t(), map()) :: Ecto.Changeset.t()
def change_hub(%__MODULE__{} = team, attrs \\ %{}) do
changeset(team, attrs)
end
defp changeset(team, attrs) do
def creation_changeset(team, attrs) do
team
|> cast(attrs, @fields)
|> validate_required(@fields)
|> add_id()
end
def update_changeset(team, attrs) do
team
|> cast(attrs, @editable_fields)
|> validate_required(@editable_fields)
end
defp add_id(changeset) do
if name = get_field(changeset, :hub_name) do
change(changeset, %{id: "team-#{name}"})

View file

@ -187,6 +187,14 @@ defmodule Livebook.Teams do
end
end
@doc """
Returns an `%Ecto.Changeset{}` for tracking hub changes.
"""
@spec change_hub(Team.t(), map()) :: Ecto.Changeset.t()
def change_hub(%Team{} = team, attrs \\ %{}) do
Team.update_changeset(team, attrs)
end
@doc """
Creates a Hub.
@ -194,7 +202,7 @@ defmodule Livebook.Teams do
"""
@spec create_hub!(map()) :: Team.t()
def create_hub!(attrs) do
changeset = Team.change_hub(Team.new(), attrs)
changeset = Team.creation_changeset(Team.new(), attrs)
team = apply_action!(changeset, :insert)
Hubs.save_hub(team)
@ -208,7 +216,7 @@ defmodule Livebook.Teams do
"""
@spec update_hub(Team.t(), map()) :: {:ok, Team.t()} | {:error, Ecto.Changeset.t()}
def update_hub(%Team{} = team, attrs) do
changeset = Team.change_hub(team, attrs)
changeset = Team.update_changeset(team, attrs)
id = get_field(changeset, :id)
if Hubs.hub_exists?(id) do

View file

@ -2,7 +2,7 @@ defmodule LivebookWeb.Hub.Edit.TeamComponent do
use LivebookWeb, :live_component
alias Livebook.Hubs
alias Livebook.Hubs.{Provider, Team}
alias Livebook.Hubs.Provider
alias Livebook.Teams
alias LivebookWeb.LayoutHelpers
alias LivebookWeb.NotFoundError
@ -10,7 +10,7 @@ defmodule LivebookWeb.Hub.Edit.TeamComponent do
@impl true
def update(assigns, socket) do
socket = assign(socket, assigns)
changeset = Team.change_hub(assigns.hub)
changeset = Teams.change_hub(assigns.hub)
show_key? = assigns.params["show-key"] == "true"
secrets = Hubs.get_secrets(assigns.hub)
file_systems = Hubs.get_file_systems(assigns.hub, hub_only: true)
@ -387,7 +387,7 @@ defmodule LivebookWeb.Hub.Edit.TeamComponent do
def handle_event("validate", %{"team" => attrs}, socket) do
changeset =
socket.assigns.hub
|> Team.change_hub(attrs)
|> Teams.change_hub(attrs)
|> Map.replace!(:action, :validate)
{:noreply, assign_form(socket, changeset)}