Skip to content

Ka666aH/TaskList

Repository files navigation

Task list

Пет-проект для отработки реализаций технологий на практике.

Функционал

Роли:

  1. Клиент
  • Регистрация, вход, выход.
  • Управление задачами (CRUD).
  • Управление аккаунтом (смена пароля, удаление).
  1. Администратор
  • Клиентские функции.
  • Смена роли пользователя.
  • Просмотр показателей (количество пользователей, получение пользователей по страницам, количество задач, количество задач у пользователя).

Реализованные технологии и практики

  • Луковая архитектура
  • PostgreSQL 18
  • Entity Framework Core 6
  • BCrypt 4 (хэширование паролей)
  • IMemoryCache (кэширование)
  • JWT (аутентификация/авторизация)
  • DotNetEnv (локальное получение секретов)
  • xUnit и FluentAssertions (интеграционные тесты)
  • Coverlet и ReportGenerator (формирование отчётов о покрытии кода)

Тестирование и покрытие кода

Проект покрыт интеграционными тестами с использованием xUnit и FluentAssertions. Покрытие кода превышает 90%. Отчёты о покрытии генерируются с помощью Coverlet и ReportGenerator.

Запуск тестов:

cd .\TaskList.Tests\
dotnet test

Формирование отчёта:

cd .\TaskList.Tests\
coverlet "bin\debug\net10.0\tasklist.tests.dll" --target "dotnet" --targetargs "test --no-build" --format "opencover" --output "coverage.opencover.xml" --exclude-by-file "**/migrations/*" --exclude-by-file "**/*designer.cs" --exclude-by-file "**/obj/**" --exclude "[infrastructure]infrastructure.migrations.*" --exclude "[presentation]microsoft.aspnetcore.openapi.generated.*" --exclude "[domain]domain.exceptions.*exception"
reportgenerator -reports:coverage.opencover.xml -targetdir:coveragereport -reporttypes:Html

Отчёт доступен по пути: .\TaskList.Tests\coveragereport\index.html

Инструкция

Приложение использует протокол HTTP и занимает порт 5000.

Приложение использует интерфейс Swagger UI для тестирования API, который находится по адресу:

http://localhost:5000/swagger/index.html

Docker Compose

Для запуска с помощью Docker Compose необходим исходный код приложения, так как используется многоступенчатая сборка.

Перед запуском необходимо указать переменные окружения в .env файле (необходимый файл находится в корне приложения).

В корне приложения, где хранится docker-compose.yml, выполнить команду (в зависимости от версии):

docker-compose up

или

docker compose up

Локально

Для локального запуска потребуется СУБД PostgreSQL.

Перед запуском необходимо указать переменные окружения в .env файле (в исходном коде необходимый файл хранится в папке Presentation).

Запустить Presentation.exe (в исходном коде необходимый файл хранится в папке Presentation).

Переменные окружения

  • POSTGRESQL_USER – пользователь СУБД (по умолчанию dev_user). Необходимо указать существующего в СУБД пользователя, например postgres (пользователь PostgreSQL по умолчанию).
  • POSTGRESQL_PASSWORD – пароль пользователя СУБД (по умолчанию dev_password).
  • JWT_KEY – секретный ключ JWT, используемый для шифрования подписи токена. Минимальная длина ключа 32 символа (по умолчанию testkeytestkeytestkeytestkeytestkey).
  • DEFAULT_ADMIN_PASSWORD – пароль администратора по умолчанию (по умолчанию admin).

Особенности

При первом запуске приложения будет создан администратор по умолчанию с логином admin.

Все регистрирующиеся пользователи являются клиентами.

Стандартный WeatherForecast оставлен как контроллер, не требующий аутентификации.

About

Web API для управления задачами с ролевой моделью на ASP.NET Core. PostgreSQL, JWT-аутентификация, BCrypt для хэширования паролей, кэширование в памяти, интеграционные тесты (xUnit, FluentAssertions) с покрытием >90% и запуск в Docker.

Topics

Resources

Stars

Watchers

Forks

Contributors