Тестовое задание для стажировки Vk 2023. Было необходимо реализовать API приложение для управления пользователями.
Реализованы следующие REST-методы API для управления пользователями:
- Создание пользователя. Метод создает пользователя и возвращает полную информацию о нем с group и state.
- Удаление пользователя по его идентификатору. Реализовано мягкое удаление, путем выставления статуса "Blocked" у пользователя.
- Получение полной информации о пользователе по его идентификатору
- Получение списка пользователей. Метод возвращает список существующих пользователей с возможностью отправки по частям для снижения нагрузки.
Информация о пользователе содержит id, логин, дату создания, группу и состояние.
- Реализована Basic-авторизации, добавлена возможность авторизация через Swagger. Также для тестирования на методе удаления применен атрибут Authorize для роли администратора.
- Реализована пагинация для получения списка пользователей с параметрами offset и limit.
- Написаны unit-тесты для сервиса пользователей с использованием библиотеки OneOf.
- .NET 7.0
- ASP.NET 7.0
Приложение можно собрать и запустить локально, либо запустить через Docker.
Для того, чтобы запустить проект локально с возможностью отладки понадобится установить .NET 7 SDK.
(Проверить версию .NET можно командой: dotnet --version
)
Ссылка на .NET с инструкцией установки.
Далее необходимо скачать исходники проекта, в appsettings изменить строку подключения к БД на свою и в папке с проектом выполнить команды:
dotnet restore # Восстановить зависимости
dotnet run # Запустить приложение
Аналогично скачиваем исходники и в папке с docker-compose файлом выполняем команды:
docker-compose build # Собрать проект
docker-compose up # Запустить проект
После запуска приложение будет доступно по адресу http://localhost:5000.
При создании пользователя выставлена искусственная задержка 5 секунд. Так как удаления пользователей реализовано мягко на логин пользователя в БД нет ограничения уникальности (т.е. может быть несколько удаленных пользователей с одним и тем же логином). Непосредственно создание пользователя обернуто в транзакцию уровня Serializable. Это сделано для того, чтобы избежать ситуации, когда сервер получает два и более запроса на создание с одним и тем логином и создает несколько пользователей с одинаковым логином.
- Интерактивная документация Swagger доступна по адресу http://localhost:5000/swagger/index.html
- Спецификация OpenAPI доступна по адресу http://localhost:5000/swagger/v1/swagger.json