Users could register duplicate callsigns with different casing (e.g., "w1aw" and "W1AW") because the database unique index was case-sensitive. Additionally, live validation showed false "already taken" errors on every keystroke. Changes: - Add case-insensitive unique index using lower(callsign) - Skip callsign uniqueness validation during live form changes - Add test verifying case-insensitive uniqueness enforcement
11 lines
355 B
Elixir
11 lines
355 B
Elixir
defmodule Aprsme.Repo.Migrations.MakeCallsignCaseInsensitive do
|
|
use Ecto.Migration
|
|
|
|
def change do
|
|
# Drop the existing case-sensitive unique index
|
|
drop unique_index(:users, [:callsign])
|
|
|
|
# Create a case-insensitive unique index using LOWER()
|
|
create unique_index(:users, ["lower(callsign)"], name: :users_callsign_lower_index)
|
|
end
|
|
end
|