Для анонимного пользователя доступно:
- регистрация аккаунта (email, login, password) - учесть уникальность email
- вход в аккаунт через email и password
- сброс пароля
Для авторизированно пользователя доступно:
- изменение пароля
- изменение логина
- просмотр активных сессий (время входа, User Agent)
- выход из системы
- безопасность
- скорость ответа
Для сервиса потребуются два хранилища:
- PostgreSQL - для хранения информации о пользователях и всех сессиях
- Redis - для хранения активных сессий и кодов для двухфакторной аутентификации
erDiagram
User {
serial id
varchar name
varchar email
timestamp created_at
}
User ||--|| SecureUserInfo : has
SecureUserInfo{
serial id
varchar hashed_password
varchar salt
timestamp updated_at
}
User ||--|{ SignIn : "logins with"
SignIn{
serial id
varchar user_agent
varchar auth_token
timestamp created_at
bool is_logout
timestamp logout_at
}
В сервисе явно выделены сервисы с бизнес-логикой, который оперируют интерфейсами репозиториев, которые в свою очередь ответственны за доступ к данным. Для юнит-тестов используются репозитории, которые хранят данные в оперативной памяти.
docker-compose up -d
Для визуализации можно поднять allure с помощью docker-compose
# docker compose -f docker-compose.test.yaml up
poetry run pytest tests --alluredir=allure-results
Для поднятие зависимых сервисов используется docker-compose
docker compose -f docker-compose.test.yaml up
poetry run pytest tests --alluredir=allure-results