feat: unique display names (case-insensitive) + inline recover on join
Backend: - Migration 007 deduplicates existing users by name (case-insensitive, keeping oldest) and adds a unique index on (event_id, LOWER(display_name)) - find_by_event_and_name is now case-insensitive (LOWER comparison) - join endpoint checks name availability before creating; returns 409 Conflict with code "conflict" when the name is taken Frontend (join page): - On 409, switches to a name-taken view showing an amber warning with name-choice tips, a PIN input that runs the recover flow inline, and an "Anderen Namen wählen" button that returns to the name input Test guide: added Steps 8 (rate-limit auto-retry) and 9 (name uniqueness) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
4
backend/migrations/007_user_name_unique.down.sql
Normal file
4
backend/migrations/007_user_name_unique.down.sql
Normal file
@@ -0,0 +1,4 @@
|
||||
DROP INDEX IF EXISTS idx_user_event_name_ci;
|
||||
|
||||
CREATE INDEX idx_user_event_name
|
||||
ON "user"(event_id, display_name);
|
||||
Reference in New Issue
Block a user