Backend: migration 007 adds a case-insensitive unique index on user names per event. join endpoint returns 409 conflict when the name is taken. find_by_event_and_name uses LOWER() for case-insensitive recovery. Frontend: join page handles 409 with a name-taken view — amber warning, name-choice tips, inline PIN recovery form, and "Anderen Namen wählen" button. Test guide updated with Steps 8 and 9. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
16 lines
557 B
SQL
16 lines
557 B
SQL
-- Deduplicate users with the same name (case-insensitive) per event,
|
|
-- keeping the oldest account so no real data is lost.
|
|
DELETE FROM "user"
|
|
WHERE id NOT IN (
|
|
SELECT DISTINCT ON (event_id, LOWER(display_name)) id
|
|
FROM "user"
|
|
ORDER BY event_id, LOWER(display_name), created_at ASC
|
|
);
|
|
|
|
-- Drop the old non-unique index (replaced below)
|
|
DROP INDEX IF EXISTS idx_user_event_name;
|
|
|
|
-- Unique index enforces one account per name per event (case-insensitive)
|
|
CREATE UNIQUE INDEX idx_user_event_name_ci
|
|
ON "user" (event_id, LOWER(display_name));
|