@@ -815,6 +815,32 @@ defmodule Algora.Workspace do
815
815
end
816
816
end
817
817
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
+
818
844
defp add_contributions_async ( _token , users , contributions ) do
819
845
users_map = Enum . group_by ( users , & & 1 . provider_login )
820
846
@@ -836,7 +862,7 @@ defmodule Algora.Workspace do
836
862
end
837
863
end )
838
864
839
- if Enum . any? ( results , & match? ( { :ok , _ } , & 1 ) ) do
865
+ if results == [ ] or Enum . any? ( results , & match? ( { :ok , _ } , & 1 ) ) do
840
866
:ok
841
867
else
842
868
Logger . error ( "Failed to add contributions: #{ inspect ( results ) } " )
0 commit comments