@@ -834,43 +834,83 @@ defmodule DatabaseMigration do
834
834
end
835
835
836
836
defp index_merged_users ( db ) do
837
- ( db [ "User" ] ++ db [ "Org" ] )
838
- |> Enum . group_by ( fn row ->
839
- if user? ( row ) do
840
- github_user = find_by_index ( db , "GithubUser" , "user_id" , row [ "id" ] )
841
-
842
- if is_nil ( github_user ) or nullish? ( github_user [ "login" ] ) do
843
- "algora_" <> row [ "id" ]
837
+ entities =
838
+ ( db [ "User" ] ++ db [ "Org" ] )
839
+ |> Enum . group_by ( fn row ->
840
+ if user? ( row ) do
841
+ github_user = find_by_index ( db , "GithubUser" , "user_id" , row [ "id" ] )
842
+
843
+ if is_nil ( github_user ) or nullish? ( github_user [ "login" ] ) do
844
+ "algora_" <> row [ "id" ]
845
+ else
846
+ "github_" <> github_user [ "login" ]
847
+ end
844
848
else
845
- "github_" <> github_user [ "login" ]
849
+ if nullish? ( row [ "github_handle" ] ) do
850
+ "algora_" <> row [ "id" ]
851
+ else
852
+ "github_" <> row [ "github_handle" ]
853
+ end
846
854
end
847
- else
848
- if nullish? ( row [ "github_handle" ] ) do
849
- "algora_" <> row [ "id" ]
850
- else
851
- "github_" <> row [ "github_handle" ]
855
+ end )
856
+ |> Enum . flat_map ( fn { _k , entities } ->
857
+ case entities do
858
+ [ user ] ->
859
+ [ { :unmerged , user [ "id" ] , user } ]
860
+
861
+ entities ->
862
+ case Enum . find ( entities , & user? / 1 ) do
863
+ nil ->
864
+ raise "Unexpected number of users for #{ inspect ( entities ) } "
865
+
866
+ user ->
867
+ Enum . map ( entities , fn row ->
868
+ # if row["id"] != user["id"], do: Logger.info("[same github user] #{row["handle"]} -> #{user["handle"]}")
869
+ { :merged , row [ "id" ] , user }
870
+ end )
871
+ end
852
872
end
853
- end
854
- end )
855
- |> Enum . flat_map ( fn { _k , entities } ->
856
- case Enum . find ( entities , & user? / 1 ) do
857
- nil ->
858
- case entities do
859
- [ user ] -> [ { user [ "id" ] , user } ]
860
- _ -> raise "Unexpected number of users for #{ inspect ( entities ) } "
861
- end
873
+ end )
874
+ |> Enum . group_by ( fn { type , _id , _user } -> type end )
875
+
876
+ merged1 =
877
+ entities
878
+ |> Map . get ( :merged , [ ] )
879
+ |> Map . new ( fn { _type , id , user } -> { id , user } end )
880
+
881
+ merged2 =
882
+ entities
883
+ |> Map . get ( :unmerged , [ ] )
884
+ |> Enum . map ( fn { _type , _id , row } -> row end )
885
+ |> Enum . group_by ( fn row -> row [ "handle" ] end )
886
+ |> Enum . flat_map ( fn { handle , entities } ->
887
+ case entities do
888
+ [ entity ] ->
889
+ [ { entity [ "id" ] , entity } ]
890
+
891
+ [ _entity1 , _entity2 ] ->
892
+ user = Enum . find ( entities , & user? / 1 )
893
+ org = Enum . find ( entities , & ( not user? ( & 1 ) ) )
894
+
895
+ if is_nil ( user ) or is_nil ( org ) do
896
+ raise "User or org not found for handle #{ handle } : #{ inspect ( entities ) } "
897
+ end
862
898
863
- user ->
864
- Enum . map ( entities , fn row ->
865
- if row [ "id" ] != user [ "id" ] do
866
- Logger . info ( "#{ row [ "handle" ] } -> #{ user [ "handle" ] } " )
899
+ if org [ "creator_id" ] == user [ "id" ] do
900
+ # Logger.info("[same handle] #{org["handle"]} -> #{user["handle"]}")
901
+ Enum . map ( entities , fn row -> { row [ "id" ] , user } end )
902
+ else
903
+ Logger . warning ( "Org #{ org [ "handle" ] } was not created by user #{ user [ "handle" ] } " )
904
+ Enum . map ( entities , fn row -> { row [ "id" ] , row } end )
867
905
end
868
906
869
- { row [ "id" ] , user }
870
- end )
871
- end
872
- end )
873
- |> Map . new ( fn { k , v } -> { k , v } end )
907
+ _ ->
908
+ raise "Unexpected number of entities for handle #{ handle } : #{ inspect ( entities ) } "
909
+ end
910
+ end )
911
+ |> Map . new ( )
912
+
913
+ Map . merge ( merged1 , merged2 )
874
914
end
875
915
876
916
defp index_by_field ( data , field ) do
0 commit comments