Запуск проекта в режиме разработчика
На вход передается номер телефона в произвольном формате (примеры: '+7 913 674 00 00', '8 913-674-0000', '(913) 674-0000') При вызове данной ручки происходит следующее:
- производится поиск телефона в БД. при отсутствии создается
- вместе с пользователем создается профиль, для которого создается 6-значный уникальный реферальный код состоящий из цифр и латинских букв, за исключением похожих символов
- задается пароль* (4 случайные цифры)
- отправляется SMS с паролем (на данный момент пишется в консоль и добавляется в поле "demo_message" ответа)
- в случае успеха возвращается телефон и demo_message со сгенерированным цифровым паролем
*если введен телефон администратора, то новый пароль не задается
На вход подается номер телефона и цифровой код из SMS. При вызове данной ручки происходит следующее:
- при совпадении кредов создается токен аутентификации
- задается новый пароль* (таким способом обеспечивается одноразовость кода)
- в случае успеха возвращается auth_token, который необходимо передавать в остальные ручки в заголовке Authorization (например, Authorization: 'Token 95003ded5b0fef7701b64a8ae968cd652b811b2b')
*если введен телефон администратора, то новый пароль не задается
- для вызова требуется авторизация (заголовок Authorization)
- при успешном выполнении удаляется ранее выданный auth_token
Для вызова требуется авторизация (заголовок Authorization).
- возвращает информацию о текущем (авторизованном) профиле.
- в поле referrals содержится список телефонов пользователей, у которых в профиле указан реферальный код данного профиля.
Пример ответа:
{
"first_name": "Сергей",
"last_name": "Гриценко",
"email": "gritsenko.serge.2013@yandex.ru",
"referral_code": "KvHTLD",
"affiliate_code": "",
"referrals": [
"+79136745204",
"+79136745203",
"+79136745202"
]
}
Для вызова требуется авторизация (заголовок Authorization).
- изменяет профиль пользователя
- здесь, в том числе, можно задать реферальный код аффилиата* текущего пользователя
- в случае успеха возвращает информацию о текущем (авторизованном) профиле.
*здесь и в коде использовал термин 'affiliate', так как более привычный 'referrer', как мне кажется, мог внести путаницу ввиду похожего с 'referral' написания.
- на уровне БД запретить задавать affiliate_code значением отсутствующим в referral_code (актуально только для сырых запросов)
- настроить CI/CD
- рассмотреть вариант с реферальным кодом в виде отдельной сущности (предварительно: упростится работа через ORM за счет наличия ForeignKey, повысится консистентность)
- написать unit-тесты