@@ -3,6 +3,8 @@ defmodule CodeCorps.Accounts.Changesets do
33 Changesets for Code Corps accounts.
44 """
55
6+ import CodeCorpsWeb.Gettext
7+
68 alias CodeCorps.GitHub.Adapters
79 alias CodeCorps.Helpers.RandomIconColor
810 alias Ecto.Changeset
@@ -15,9 +17,10 @@ defmodule CodeCorps.Accounts.Changesets do
1517 struct
1618 |> Changeset . change ( params |> Adapters.User . from_github_user ( ) )
1719 |> Changeset . put_change ( :sign_up_context , "github" )
18- |> Changeset . unique_constraint ( :email )
1920 |> Changeset . validate_inclusion ( :type , [ "bot" , "user" ] )
2021 |> RandomIconColor . generate_icon_color ( :default_color )
22+ |> Changeset . unique_constraint ( :email )
23+ |> unique_github_constraint ( )
2124 end
2225
2326 @ doc ~S"""
@@ -28,8 +31,9 @@ defmodule CodeCorps.Accounts.Changesets do
2831 struct
2932 |> Changeset . cast ( params , [ :github_auth_token , :github_avatar_url , :github_id , :github_username , :type ] )
3033 |> ensure_email_without_overwriting ( params )
31- |> Changeset . unique_constraint ( :email )
3234 |> Changeset . validate_required ( [ :github_auth_token , :github_avatar_url , :github_id , :github_username , :type ] )
35+ |> Changeset . unique_constraint ( :email )
36+ |> unique_github_constraint ( )
3337 end
3438
3539 @ spec ensure_email_without_overwriting ( Changeset . t , map ) :: Changeset . t
@@ -40,4 +44,9 @@ defmodule CodeCorps.Accounts.Changesets do
4044 end
4145 end
4246 defp ensure_email_without_overwriting ( % Changeset { } = changeset , _params ) , do: changeset
47+
48+ defp unique_github_constraint ( struct ) do
49+ struct
50+ |> Changeset . unique_constraint ( :github_id , message: dgettext ( "errors" , "account is already connected to someone else" ) )
51+ end
4352end
0 commit comments