Skip to content

Commit 4b4abe7

Browse files
committed
feat: add async function to fetch top contributions
1 parent 7467234 commit 4b4abe7

File tree

1 file changed

+27
-1
lines changed

1 file changed

+27
-1
lines changed

lib/algora/workspace/workspace.ex

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -815,6 +815,32 @@ defmodule Algora.Workspace do
815815
end
816816
end
817817

818+
def fetch_top_contributions_async(token, provider_logins) when is_list(provider_logins) do
819+
users_with_contributions = get_users_with_contributions(provider_logins)
820+
users_with_contributions_logins = Enum.map(users_with_contributions, & &1.provider_login)
821+
822+
users_without_contributions = provider_logins -- users_with_contributions_logins
823+
824+
cloud_result =
825+
if Enum.empty?(users_without_contributions) do
826+
{:ok, []}
827+
else
828+
Algora.Cloud.top_contributions(users_without_contributions)
829+
end
830+
831+
with {:ok, cloud_contributions} <- cloud_result,
832+
{:ok, users} <- ensure_users(token, provider_logins),
833+
:ok <- add_contributions_async(token, users, cloud_contributions) do
834+
# Always mark users as synced after fetching from Cloud API
835+
mark_users_as_synced(users_without_contributions, users)
836+
{:ok, users}
837+
else
838+
{:error, reason} ->
839+
Logger.error("Failed to fetch contributions for #{inspect(provider_logins)}: #{inspect(reason)}")
840+
{:error, reason}
841+
end
842+
end
843+
818844
defp add_contributions_async(_token, users, contributions) do
819845
users_map = Enum.group_by(users, & &1.provider_login)
820846

@@ -836,7 +862,7 @@ defmodule Algora.Workspace do
836862
end
837863
end)
838864

839-
if Enum.any?(results, &match?({:ok, _}, &1)) do
865+
if results == [] or Enum.any?(results, &match?({:ok, _}, &1)) do
840866
:ok
841867
else
842868
Logger.error("Failed to add contributions: #{inspect(results)}")

0 commit comments

Comments
 (0)