Web API для тестового задания на ASP.NET 6
- Table Of Contents
- ТЗ
- Общее описание
- Уточнения по реализации основных требований:
- Уточнения по реализации опциональных требований:
- Локальный запуск
Реализован API на ASP.NET 6
Реализованы основные и опциональные требования с уточнениями в реализации, описанными ниже
Реализована поддержка docker-compose (см. "Локальный запуск")
API задокументирован с помощью Swagger
Проект структурирован по принципам clean architecture
Используется CQRS
через MediatR
В качестве ORM используется Entity Framework Core
, в качестве СУБД PostgreSql
Аутентификация реализована через JWT
токены
Написаны модульные тесты с помощью xUnit
и FluentAssertions
- В сущности
user
столбецuser_password
разделён наuser_passwordHash
иuser_passwordSalt
, чтобы хранить пароли в БД в захэшированном виде
- Требование не иметь более одного пользователя с
user_group.code = "Admin"
реализовано путем инициализации пользователя-админа в БД автоматически (см. DbInitExecutor.cs) - Логин пользователя-администратора = "Admin", не конфигурируется
- Пароль можно сконфигурировать (по дефолту "AdminPassword")
Значение в docker-compose = "Admin" (см. Учетные данные администратора)
- Лок при регистрации с задержкой на 5 секунд реализован с помощью библиотеки
DistributedLock
- Время задержки (5 секунд) может конфигурироваться через appSettings
- Было реализовано мягкое удаление для
Пользователя
черезBlockedUserState
, но также был реализован общий интерфейсISoftDeletable
для сущностей, поддерживающих мягкое удаление - Поле
created_date
так же было принято использовать для всех сущностей
- Эндпоинты были разделены по 2 контроллерам: User и Authorization
- В Authorization находятся все методы, связанные с аутентификацией, учетными данными пользователя
- К эндпоинтам применены следующие ограничения:
- Получить список пользователей может только администратор
- Получить данные пользователя, удалить пользователя, изменить логин пользователя, изменить пароль пользователя, завершить все сессии пользователя может либо администратор, либо лично пользователь, если он активен
- На регистрацию, аутентификацию, обновления токена ограничений нет
- Реализована не Basic-авторизация, а JWT-авторизация
- Реализована пагинация и сортировка для получения нескольких пользователей
- Написаны unit-тесты с помощью xUnit
-
git clone https://github.com/Skye7012/UserApiTestTaskVk.git
-
cd UserApiTestTaskVk
-
docker-compose build
-
docker-compose up
{
"login": "Admin",
"password": "Admin"
}
Volumes для БД будет создан на уровень выше корневой директории