diff --git a/lib/algora/admin/admin.ex b/lib/algora/admin/admin.ex index 968f1b3de..8a94553aa 100644 --- a/lib/algora/admin/admin.ex +++ b/lib/algora/admin/admin.ex @@ -342,7 +342,10 @@ defmodule Algora.Admin do where: t.provider_id == ^to_string(installation["id"]) ), set: - [provider_meta: Util.normalize_struct(installation)] ++ + [ + provider_meta: Util.normalize_struct(installation), + repository_selection: installation["repository_selection"] + ] ++ if(target_user, do: [provider_user_id: target_user.id], else: []) ) diff --git a/lib/algora/admin/migration/migration.ex b/lib/algora/admin/migration/migration.ex index 988fd0c56..fe74f7d6d 100644 --- a/lib/algora/admin/migration/migration.ex +++ b/lib/algora/admin/migration/migration.ex @@ -710,7 +710,6 @@ defmodule Algora.Admin.Migration do "provider" => "github", "provider_id" => row["github_id"], "provider_meta" => nil, - "avatar_url" => nil, "repository_selection" => nil, "owner_id" => nil, "connected_user_id" => connected_user["id"], diff --git a/lib/algora/workspace/schemas/installation.ex b/lib/algora/workspace/schemas/installation.ex index ec164c0f2..0de288978 100644 --- a/lib/algora/workspace/schemas/installation.ex +++ b/lib/algora/workspace/schemas/installation.ex @@ -10,13 +10,13 @@ defmodule Algora.Workspace.Installation do field :provider, :string, null: false field :provider_id, :string, null: false field :provider_meta, :map - field :provider_user_id, :string - field :avatar_url, :string field :repository_selection, :string - belongs_to :owner, User, null: false + belongs_to :owner, User belongs_to :connected_user, User, null: false + # TODO: make non-nullable after migration + belongs_to :provider_user, User has_many :activities, {"installation_activities", Activity}, foreign_key: :assoc_id timestamps() @@ -26,7 +26,6 @@ defmodule Algora.Workspace.Installation do params = %{ owner_id: user.id, connected_user_id: org.id, - avatar_url: data["account"]["avatar_url"], repository_selection: data["repository_selection"], provider_id: to_string(data["id"]), provider_user_id: to_string(provider_user.id), @@ -37,7 +36,6 @@ defmodule Algora.Workspace.Installation do |> cast(params, [ :owner_id, :connected_user_id, - :avatar_url, :repository_selection, :provider_id, :provider_user_id, diff --git a/lib/algora/workspace/workspace.ex b/lib/algora/workspace/workspace.ex index 4eb3ae33b..231ee5b4e 100644 --- a/lib/algora/workspace/workspace.ex +++ b/lib/algora/workspace/workspace.ex @@ -286,10 +286,19 @@ defmodule Algora.Workspace do def get_installation(id), do: Repo.get(Installation, id) def get_installation!(id), do: Repo.get!(Installation, id) - def list_installations_by(fields), do: Repo.all(from(i in Installation, where: ^fields)) + def list_installations_by(fields), + do: + Repo.all( + from(i in Installation, + where: ^fields, + join: connected_user in assoc(i, :connected_user), + join: provider_user in assoc(i, :provider_user), + select_merge: %{connected_user: connected_user, provider_user: provider_user} + ) + ) def list_user_installations(user_id) do - Repo.all(from(i in Installation, where: i.owner_id == ^user_id, preload: [:connected_user])) + list_installations_by(owner_id: user_id) end def fetch_command_response(ticket_id, command_type) do diff --git a/lib/algora_web/live/org/dashboard_live.ex b/lib/algora_web/live/org/dashboard_live.ex index 29459dda4..33edb2c1c 100644 --- a/lib/algora_web/live/org/dashboard_live.ex +++ b/lib/algora_web/live/org/dashboard_live.ex @@ -244,32 +244,10 @@ defmodule AlgoraWeb.Org.DashboardLive do <.card_content> -
- <%= if @installations != [] do %> - <%= for installation <- @installations do %> -
- -
-

{installation.provider_meta["account"]["login"]}

-

- Algora app is installed in - {installation.repository_selection} - repositories -

-
-
- <% end %> - <.button phx-click="install_app" class="ml-auto gap-2"> - - Manage {ngettext("installation", "installations", length(@installations))} - - <% else %> -
- <.button phx-click="install_app" class="ml-auto gap-2"> - Install GitHub App - -
- <% end %> +
+ <.button phx-click="install_app" class="ml-auto gap-2"> + Install GitHub App +
diff --git a/lib/algora_web/live/org/settings_live.ex b/lib/algora_web/live/org/settings_live.ex index c10e38d3a..03a1cb2dc 100644 --- a/lib/algora_web/live/org/settings_live.ex +++ b/lib/algora_web/live/org/settings_live.ex @@ -70,9 +70,9 @@ defmodule AlgoraWeb.Org.SettingsLive do <%= if @installations != [] do %> <%= for installation <- @installations do %>
- +
-

{installation.provider_meta["account"]["login"]}

+

{installation.provider_user.provider_login}

Algora app is installed in {installation.repository_selection} repositories diff --git a/lib/algora_web/live/user/installations_live.ex b/lib/algora_web/live/user/installations_live.ex index c8fb9adab..321ec8c70 100644 --- a/lib/algora_web/live/user/installations_live.ex +++ b/lib/algora_web/live/user/installations_live.ex @@ -19,14 +19,14 @@ defmodule AlgoraWeb.User.InstallationsLive do

{installation.provider_login}
- {installation.provider_login} + {installation.provider_user.provider_login}
@@ -126,7 +126,7 @@ defmodule AlgoraWeb.User.InstallationsLive do end def mount(_params, _session, socket) do - installations = Workspace.list_user_installations(socket.assigns.current_user.id) + installations = Workspace.list_installations_by(owner_id: socket.assigns.current_user.id) {:ok, assign(socket, :installations, installations)} end end diff --git a/priv/repo/migrations/20250314181621_remove_avatar_url_from_installations.exs b/priv/repo/migrations/20250314181621_remove_avatar_url_from_installations.exs new file mode 100644 index 000000000..9b6bb818a --- /dev/null +++ b/priv/repo/migrations/20250314181621_remove_avatar_url_from_installations.exs @@ -0,0 +1,9 @@ +defmodule Algora.Repo.Migrations.RemoveAvatarUrlFromInstallations do + use Ecto.Migration + + def change do + alter table(:installations) do + remove :avatar_url + end + end +end diff --git a/test/support/factory.ex b/test/support/factory.ex index 7a4cc5224..702cd9861 100644 --- a/test/support/factory.ex +++ b/test/support/factory.ex @@ -251,10 +251,8 @@ defmodule Algora.Factory do provider_id: sequence(:provider_id, &"#{&1 + offset(:installation)}"), provider_user_id: sequence(:provider_user_id, &"#{&1 + offset(:installation)}"), provider_meta: %{ - "account" => %{"avatar_url" => "https://algora.io/asset/storage/v1/object/public/mock/piedpiper-logo.png"}, "repository_selection" => "selected" }, - avatar_url: "https://algora.io/asset/storage/v1/object/public/mock/piedpiper-logo.png", repository_selection: "selected" } end