GonarchX / VKTestBackendTask

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

VKTestBackendTask

Формулировка задания

Необходимо реализовать API приложение на ASP.NET Core (5 или более поздняя версия).
Требования бизнес-логики и ограничения:

  • Формат запроса/ответа должен быть JSON.
  • В качестве СУБД необходимо использовать PostgreSQL.
  • В качестве ORM необходимо использовать EntityFrameworkCore.
  • В качестве моделей данных должны использоваться следующие сущности:
    • user (id, login, password, created_date, user_group_id, user_state_id)
    • user_group (id, code, description) Возможные значения для code (Admin, User)
    • user_state (id, code, description) Возможные значения для code (Active, Blocked)
  • Приложение должно позволять добавлять/удалять/получать пользователей. Получить можно как одного, так и всех пользователей (добавление, удаление только по одному). При получении пользователей должна возвращаться полная информация о них (с user_group и user_state).
  • Система должна не позволять иметь более одного пользователя с user_group.code="Admin".
  • После успешной регистрации нового пользователя, ему должен быть выставлен статус "Active". Добавление нового пользователя должно занимать 5 сек. За это время при попытке добавления пользователя с таким же login должна возвращаться ошибка.
  • Удаление пользователя должно осуществляться не путём физического удаления из таблицы, а путём выставления статуса "Blocked" у пользователя.
  • Допускается добавлять вспомогательные данные в существующие таблицы.

Опционально

  • В качестве способа авторизации следует использовать Basic-авторизацию.
  • Реализовать пагинацию для получения нескольких пользователей.
  • Написать unit-тесты с помощью xUnit

Реализованный функционал

  • Реализован CRUD для работы с пользователем (поиск, постраничное получение пользователей, удаление, добавление)
    • При удалении пользователю выставляется статус "Blocked"
    • Методы для работы с пользователем асинхронны
  • В качестве ORM используется EFCore
  • В качестве БД используется PostgreSQL
  • Для регистрации входа в систему используется Basic авторизация
  • Все методы контроллеров покрыты тестами (используется XUnit + Moq)
  • Все методы контроллеров обладают XML комментариями, для автоматической генерации документации в Swagger
  • Добавление пользователя искусственно замедленно (при попытке добавить нового пользователя с занятым login, выдается ошибка Auth.AlreadyExistedUser)
  • Добавлена возможность динамически менять максимальное количество администраторов через Options
  • Обработка доменных ошибок (занятый login, лимит по количеству администраторов) в приложении осуществлена при помощи библиотеки ErrorOr
  • Версионирование API при помощи встроенных инструментов в ASP.NET Core

Запуск приложения

Чтобы запустить приложение, выполните следующие шаги:

  1. Склонируйте репозиторий с помощью Git командой: git clone https://github.com/GonarchX/VKTestBackendTask.git
  2. Зайдите в директорию deploy
  3. Выполните команту "docker-compose up -d" для запуска контейнера с PostgreSQL
  4. Зайдите в директорию VKTestBackendTask.Api
  5. Выполните команду dotnet ef database update, которая создаст базу данных и таблицы в соответствии с миграциями
  6. Установите необходимые пакеты и зависимости с помощью команды dotnet restore
  7. Запустите приложение с помощью команды dotnet run
  8. Откройте в браузере, указанный в консоли адрес (по-умолчанию https://localhost:7233) с путем "/swagger" так, чтобы получившийся адрес выглядел следующим образом: https://localhost:7233/swagger
  9. Перед вами откроется Swagger, первым делом, необходимо вызвать метод по пути /api/v1/develop в секции InitApp, для первоначального заполнения базы данных (добавляются все необходимые user_state(Active, Blocked) и user_group(Admin, User). Повторный вызов метода повторно заполнит базу данных
  10. Зарегистрируйтесь в качестве администратора по пути /api/v1/auth/registerAsAdmin
  11. Нажмите на зеленую кнопку "Authorize" в правом верхнем углу, введите ваши личные данные, которые вы использовали для регистрации в качестве администратора.
    Таким образом, вы добавите заголовок "Authorization" со значением ваших данных в соответствии с Basic авторизацией. Это необходимо для работы с методами в секции User

Примечания

Для изменения максимального количества администраторов измените значения поля MaxAdminsCount внутри appsettings.json

About


Languages

Language:C# 100.0%