- Ссылка на гитхаб: 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 сервисов, строка подключения к БД и прочее. Так же в этом проекте находится сам исполняемый файл (найти который вы можете исходя из инструкции).
Swagger URL: https://localhost:5000/swagger/
Рекомендую воспроизводить запуск через Visual Studio в случае возникновения проблем с открытием через экзешник.
- Настройте строку подключения к вашей базе данных в appsettings.json (PgConnection)
- Перейдите в каталог Simbir.RestApi\bin\Release\net7.0\publish
- Откройте приложение и перейдите по ссылке указанной выше.
- В случае, если сайт недоступен - откройте окно приложения и перейдите по указанной в нём ссылке.
- Некоторые запросы могут выдавать чувствительную информацию (хэшированый пароль и проч.). Причина этой проблемы заключается в том, что в качестве возвращаемых данных используются сущности из базы данных. Для решения этой проблемы можно было бы создать 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" в начале названий метода обозначает те методы, которые не будут проверять учетную запись на доступность действий, т.к. логика ролей лежит в контролерах.