GithubHelp home page GithubHelp logo

vktestbackendtask's Introduction

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.