Skip to content

Решение задания для волга-айти (Полуфинал Backend)

Notifications You must be signed in to change notification settings

HolyClerk/VolgaItSolution

Repository files navigation

Решение задания на полуфинал по дисицплине "Backend разработка Web API"

Информация

  • Ссылка на гитхаб: https://github.com/HolyClerk/VolgaItSolution
  • Решение выполнено на платформе ASP.NET Core 7.0
  • Строка подключения к базе данных PostgreSQL находится в файле appsettings.json (папка Simbir.RestApi). Строка "PgConnection".

Структура

  • Simbir.Core - доменная область приложения, в которой лежат DTO и Entity.
  • Simbir.Application - проект, в котором находятся все сервисы и абстракции для DI.
  • Simbir.Infrastructure - инфраструктурный проект, в котором находится сервис выдачи токенов и контекст базы данных.
  • Simbir.RestAPI - проект, в котором находятся: входная точка приложения (Program.cs), контроллеры, DI сервисов, строка подключения к БД и прочее. Так же в этом проекте находится сам исполняемый файл (найти который вы можете исходя из инструкции).

Инструкция

Рекомендую воспроизводить запуск через Visual Studio в случае возникновения проблем с открытием через экзешник.

  1. Настройте строку подключения к вашей базе данных в appsettings.json (PgConnection)
  2. Перейдите в каталог Simbir.RestApi\bin\Release\net7.0\publish
  3. Откройте приложение и перейдите по ссылке указанной выше.
  4. В случае, если сайт недоступен - откройте окно приложения и перейдите по указанной в нём ссылке.

Решение возникших проблем при реализации задачи и примечания для проверяющих

  • Некоторые запросы могут выдавать чувствительную информацию (хэшированый пароль и проч.). Причина этой проблемы заключается в том, что в качестве возвращаемых данных используются сущности из базы данных. Для решения этой проблемы можно было бы создать DTO-объекты, и возвращать их вместо сущностей. К сожалению по времени я не успеваю, по этому оставляю так.
  • Имя пользователя должно быть не меньше 4 символов. Пароль должен иметь как минимум 1 заглавный символ, 1 циферный, 1 non-alphanumeric символ и состоять не менее чем из 6 символов. (напр. "Qwerty123!")
  • Для авторизации в Swagger необходимо залогиниться под свой аккаунт, и полученный токен вставить в строку, которая появляется в окне Authorize. !!! Перед самим токеном в строке необходимо дописать слолв "Bearer", а после него через пробел сам токен
  • В некоторых конечных точках, в задании, указано передавать параметры в строке, а не как тело запроса. Часть таких точек покрыта [FromBody] атрибутами в параметрах и к ним написаны дтошки.
  • В AccountController нет конечной точки "SignOut" т.к. его реализация в рамках АПИ по моему мнению необязательна. JWT токены не должны сохраняться в каком-либо месте, т.к. это считается небезопасной практикой. Вместо этого стоит удалять токен в локальном хранилище пользователя (например, кэш).
  • RentController и AdminRentController: вместо string для типа аренды (в днях или минутах) используется enum, который находится по пути Simbir.Core/Entities/Rent.cs. Где 0 - дни, 1 - минуты. По окончанию аренды ставится дата окончания аренды, а так же рассчитывается конечная сумма (если аренда в днях, то округляется вверх). Вся бизнес-логика аренды лежит в сервисе "RentService.cs".
  • Создать админский аккаунт внутри приложения исходя из задания невозможно (получается замкнутный круг, ибо админов могут создавать только админы). По этой причине в AdminAccountController в конечной точке (POST) api/Admin/Account я убрал ограничение аутентификации и создать админку можно и без наличия уже созданного аккаунта. Иной способ выхода - зарегистрировать обычный аккаунт, и в записи внутри таблицы с пользователями поменять флаг "IsAdministrator" на "true"
  • В случае, если вы просматриваете код - "Force" в начале названий метода обозначает те методы, которые не будут проверять учетную запись на доступность действий, т.к. логика ролей лежит в контролерах.

About

Решение задания для волга-айти (Полуфинал Backend)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages