@@ -190,44 +190,40 @@ defmodule GameServer.Accounts do
190190 is_first_user = Repo . aggregate ( User , :count , :id ) == 0
191191 attrs = if is_first_user , do: Map . put ( attrs , "is_admin" , true ) , else: attrs
192192
193- case Repo . transaction ( fn ->
194- case % User { }
195- |> User . email_changeset ( attrs )
196- |> maybe_attach_device ( attrs )
197- |> Repo . insert ( ) do
198- { :ok , % User { } = user } ->
199- if is_first_user do
200- user
201- else
202- # build and persist token then attempt delivery
203- { encoded_token , user_token } = UserToken . build_email_token ( user , "confirm" )
204- Repo . insert! ( user_token )
205-
206- case notifier . deliver_confirmation_instructions (
207- user ,
208- confirmation_url_fun . ( encoded_token )
209- ) do
210- { :ok , _ } ->
211- user
212-
213- { :error , reason } ->
214- # rollback entire transaction so the user and token are not persisted
215- Repo . rollback ( reason )
216- end
217- end
218-
219- { :error , % Ecto.Changeset { } = changeset } ->
220- Repo . rollback ( changeset )
221-
222- err ->
223- Repo . rollback ( err )
224- end
225- end ) do
226- { :ok , % User { } = user } ->
227- { :ok , user }
193+ transaction_fun = fn ->
194+ changeset =
195+ % User { }
196+ |> User . email_changeset ( attrs )
197+ |> maybe_attach_device ( attrs )
198+
199+ case Repo . insert ( changeset ) do
200+ { :ok , % User { } = user } ->
201+ if is_first_user do
202+ user
203+ else
204+ { encoded_token , user_token } = UserToken . build_email_token ( user , "confirm" )
205+ Repo . insert! ( user_token )
206+
207+ case notifier . deliver_confirmation_instructions (
208+ user ,
209+ confirmation_url_fun . ( encoded_token )
210+ ) do
211+ { :ok , _ } -> user
212+ { :error , reason } -> Repo . rollback ( reason )
213+ end
214+ end
215+
216+ { :error , % Ecto.Changeset { } = changeset } ->
217+ Repo . rollback ( changeset )
218+
219+ err ->
220+ Repo . rollback ( err )
221+ end
222+ end
228223
229- { :error , reason } ->
230- { :error , reason }
224+ case Repo . transaction ( transaction_fun ) do
225+ { :ok , % User { } = user } -> { :ok , user }
226+ { :error , reason } -> { :error , reason }
231227 end
232228 end
233229
0 commit comments