Как реализовать создание новых пользователей при повторении
Что проверяют
Для аналитика вопрос не про код, а про требования: умеете ли вы определить, что считается повтором, описать поведение системы в каждом случае и не забыть про гонки и безопасность. Следом часто спрашивают, как это будет выглядеть в контракте API и в критериях приёмки.
Как отвечать
Начните с уточнения, о каком повторе речь: повторная регистрация того же человека, повторная отправка одного и того же запроса (двойной клик, ретрай после таймаута) или загрузка пользователей из внешней системы. Дальше каркас:
- ключ уникальности: email, телефон, логин, для юрлиц ИНН. Правило нормализации пишется в требованиях явно: email в нижнем регистре и без пробелов, телефон в формате E.164;
- поведение при совпадении: вернуть ошибку
409 Conflict, вернуть существующую запись или предложить вход и восстановление пароля. Это бизнес-решение, аналитик фиксирует его в сценарии как альтернативный поток; - повтор одного запроса: заголовок
Idempotency-Key, по которому сервер узнаёт повтор и отдаёт тот же ответ, а не создаёт вторую запись; - защита на уровне базы: уникальный индекс по нормализованному ключу. Проверка «есть ли такой пользователь» перед вставкой не спасает от двух одновременных запросов;
- пограничные статусы: что делать с удалённым, заблокированным или не подтвердившим почту пользователем, который регистрируется снова;
- импорт из внешних систем: правила сопоставления (точное совпадение ключа или ФИО плюс дата рождения), что делать с конфликтами полей, кто разбирает спорные пары вручную.
Итог оформите критериями приёмки в формате Given/When/Then на каждый вариант совпадения и таблицей кодов ответа с текстами сообщений.
Где спотыкаются
Ограничиваются схемой «проверить и создать». Двойной клик по кнопке проскакивает между проверкой и вставкой, и в базе появляются два одинаковых пользователя.
Не описывают нормализацию. Ivan@Mail.ru и ivan@mail.ru, +7 900... и 8 900... система считает разными людьми.
Пишут в ответе регистрации «такой email уже зарегистрирован». Так перебором узнают, чьи адреса есть в системе. Безопаснее одинаковый ответ и письмо владельцу адреса о попытке повторной регистрации.