@@ -270,7 +270,7 @@ defmodule Algora.Accounts do
270270
271271 case account do
272272 nil -> create_user ( info , primary_email , emails , token )
273- { user , _identity } -> update_user ( user , info , primary_email , emails , token )
273+ { user , identity } -> update_user ( user , identity , info , primary_email , emails , token )
274274 end
275275 end
276276
@@ -284,9 +284,45 @@ defmodule Algora.Accounts do
284284 |> Repo . insert ( )
285285 end
286286
287- def migrate_user ( old_user , new_user ) do
288- Repo . delete_all ( from ( i in Identity , where: i . user_id == ^ old_user . id ) )
287+ def update_user ( user , identity , info , primary_email , emails , token ) do
288+ old_user = Repo . get_by ( User , provider: "github" , provider_id: to_string ( info [ "id" ] ) )
289+
290+ identity_changeset = Identity . github_registration_changeset ( user , info , primary_email , emails , token )
291+
292+ user_changeset = User . github_registration_changeset ( user , info , primary_email , emails , token )
293+
294+ Repo . transact ( fn ->
295+ delete_result =
296+ if identity do
297+ Repo . delete ( identity )
298+ else
299+ { :ok , nil }
300+ end
289301
302+ migrate_result =
303+ if old_user && old_user . id != user . id do
304+ { :ok , old_user } =
305+ old_user
306+ |> change ( provider: nil , provider_id: nil , provider_login: nil , provider_meta: nil )
307+ |> Repo . update ( )
308+
309+ # TODO: enqueue job
310+ migrate_user ( old_user , user )
311+
312+ { :ok , old_user }
313+ else
314+ { :ok , nil }
315+ end
316+
317+ with { :ok , _ } <- delete_result ,
318+ { :ok , _ } <- migrate_result ,
319+ { :ok , _ } <- Repo . insert ( identity_changeset ) do
320+ Repo . update ( user_changeset )
321+ end
322+ end )
323+ end
324+
325+ def migrate_user ( old_user , new_user ) do
290326 Repo . update_all (
291327 from ( r in Repository , where: r . user_id == ^ old_user . id ) ,
292328 set: [ user_id: new_user . id ]
@@ -318,29 +354,6 @@ defmodule Algora.Accounts do
318354 )
319355 end
320356
321- def update_user ( user , info , primary_email , emails , token ) do
322- old_user = Repo . get_by ( User , provider: "github" , provider_id: to_string ( info [ "id" ] ) )
323-
324- Repo . transact ( fn ->
325- if old_user && old_user . id != user . id do
326- old_user
327- |> change ( provider: nil , provider_id: nil , provider_login: nil , provider_meta: nil )
328- |> Repo . update ( )
329-
330- migrate_user ( old_user , user )
331- end
332-
333- with { :ok , _ } <-
334- user
335- |> Identity . github_registration_changeset ( info , primary_email , emails , token )
336- |> Repo . insert ( ) do
337- user
338- |> User . github_registration_changeset ( info , primary_email , emails , token )
339- |> Repo . update ( )
340- end
341- end )
342- end
343-
344357 # def get_user_by_provider_email(provider, email) when provider in [:github] do
345358 # query =
346359 # from(u in User,
0 commit comments