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 для БД будет создан на уровень выше корневой директории
