From db02ec952f5cd5dbb6cf6bf1d3e04e22cecee253 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonatan=20K=C5=82osko?= Date: Wed, 8 Nov 2023 12:19:54 +0100 Subject: [PATCH] Use a more scoped changeset on teams hub update (#2328) --- lib/livebook/hubs/team.ex | 18 +++++++++--------- lib/livebook/teams.ex | 12 ++++++++++-- .../live/hub/edit/team_component.ex | 6 +++--- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/lib/livebook/hubs/team.ex b/lib/livebook/hubs/team.ex index b79b85392..d531e2198 100644 --- a/lib/livebook/hubs/team.ex +++ b/lib/livebook/hubs/team.ex @@ -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}"}) diff --git a/lib/livebook/teams.ex b/lib/livebook/teams.ex index 2e71a4c6f..bd1cac396 100644 --- a/lib/livebook/teams.ex +++ b/lib/livebook/teams.ex @@ -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 diff --git a/lib/livebook_web/live/hub/edit/team_component.ex b/lib/livebook_web/live/hub/edit/team_component.ex index 2d73f3b77..25ad583ba 100644 --- a/lib/livebook_web/live/hub/edit/team_component.ex +++ b/lib/livebook_web/live/hub/edit/team_component.ex @@ -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)}