Skip to content

Commit d5c40c6

Browse files
committed
merge related user records
1 parent ee07152 commit d5c40c6

File tree

1 file changed

+71
-31
lines changed

1 file changed

+71
-31
lines changed

scripts/database_migration.exs

Lines changed: 71 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -834,43 +834,83 @@ defmodule DatabaseMigration do
834834
end
835835

836836
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
844848
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
846854
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
852872
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
862898

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)
867905
end
868906

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)
874914
end
875915

876916
defp index_by_field(data, field) do

0 commit comments

Comments
 (0)