mirror of
https://github.com/ClaperCo/Claper.git
synced 2026-08-29 10:09:08 +02:00
Allow reusing deleted user emails
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
### Fixes and improvements
|
||||
|
||||
- Fix datetime being reset at every changes
|
||||
- Fix account creation with a soft-deleted email
|
||||
|
||||
## v.3.0.0
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ defmodule Claper.Accounts.User do
|
||||
use Ecto.Schema
|
||||
|
||||
import Ecto.Changeset
|
||||
import Ecto.Query
|
||||
|
||||
@derive {
|
||||
Flop.Schema,
|
||||
@@ -129,7 +130,9 @@ defmodule Claper.Accounts.User do
|
||||
|> validate_required([:email])
|
||||
|> validate_format(:email, ~r/^[^\s]+@[^\s]+$/, message: "must have the @ sign and no spaces")
|
||||
|> validate_length(:email, max: 160)
|
||||
|> unsafe_validate_unique(:email, Claper.Repo)
|
||||
|> unsafe_validate_unique(:email, Claper.Repo,
|
||||
query: from(user in __MODULE__, where: is_nil(user.deleted_at))
|
||||
)
|
||||
|> unique_constraint(:email)
|
||||
end
|
||||
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
defmodule Claper.Repo.Migrations.AllowReusingDeletedUserEmails do
|
||||
use Ecto.Migration
|
||||
|
||||
def change do
|
||||
drop unique_index(:users, [:email])
|
||||
create unique_index(:users, [:email], where: "deleted_at IS NULL")
|
||||
end
|
||||
end
|
||||
@@ -186,6 +186,20 @@ defmodule Claper.AccountsTest do
|
||||
assert oidc_user.user.first_name == "Local"
|
||||
assert oidc_user.user.last_name == "Name"
|
||||
end
|
||||
|
||||
test "creates a new account when the previous account with that email was deleted" do
|
||||
deleted_user = user_fixture()
|
||||
assert {:ok, deleted_user} = Accounts.delete_user(deleted_user)
|
||||
|
||||
assert {:ok, oidc_user} =
|
||||
Accounts.get_or_create_user_with_oidc(
|
||||
oidc_user_attrs(%{email: deleted_user.email})
|
||||
)
|
||||
|
||||
refute oidc_user.user.id == deleted_user.id
|
||||
refute Accounts.deleted?(oidc_user.user)
|
||||
assert Accounts.get_user_by_email(deleted_user.email).id == oidc_user.user.id
|
||||
end
|
||||
end
|
||||
|
||||
describe "change_user_email/2" do
|
||||
|
||||
Reference in New Issue
Block a user