REST API сервис для управления задачами с использованием Spring Boot.
Task Tracker API — это REST API-сервис для управления задачами с полным CRUD функционалом. Система реализует паттерн "Стратегия" для управления статусами задач, включает систему аутентификации, кэширование, логирование и отправку уведомлений по email.
-
Управление задачами:
- Создание задачи со статусом "В ожидании"
- Получение списка всех задач с сортировкой по дате создания
- Обновление задачи (название, описание, статус)
- Удаление задачи
- Получение задачи по ID
- Фильтрация задач по статусу
-
Система статусов с паттерном "Стратегия":
- PENDING (В ожидании) → можно перейти в IN_PROGRESS, CANCELLED
- IN_PROGRESS (В процессе) → можно перейти в COMPLETED, CANCELLED, PENDING
- COMPLETED (Завершена) → финальный статус
- CANCELLED (Отменена) → финальный статус
-
Система пользователей:
- Регистрация новых пользователей
- Basic Authentication для защиты API
- Хеширование паролей с помощью BCrypt
-
Кэширование:
- Redis используется для кэширования списка всех задач
- TTL кэша - 30 минут
- Автоматическая инвалидация при изменениях
-
Отправка уведомлений:
- Email уведомления о создании/изменении задач
- HTML шаблоны для писем
- Настраиваемые SMTP параметры
-
Логирование:
- Подробное логирование всех операций
- Запись в файл
logs/spring.log - Ротация логов (7 дней, макс. 10MB на файл)
-
Внешние API:
- HTTP запрос на https://api.restful-api.dev/objects
- Логирование полученных ответов
- Java 17
- Spring Boot 3.5.3
- Spring Data JPA
- Spring Security (Basic Auth)
- Spring Cache + Redis
- Spring Mail
- H2 Database
- Liquibase (миграции)
- Swagger/OpenAPI 3
- Docker & Docker Compose
- Maven
- Lombok
- JUnit 5 + Mockito (тестирование)
- ✅ REST API для управления задачами - реализованы все CRUD операции
- ✅ H2 Database - подключена с Liquibase миграциями
- ✅ Логирование - полное логирование запросов, ответов и операций
- ✅ HTTP запрос на внешний API - реализован запрос на https://api.restful-api.dev/objects
- ✅ Unit-тесты - написаны тесты для TaskService и TaskRepository (31 тест)
- ✅ Email уведомления - отправка HTML писем через Spring Mail
- ✅ Basic Authentication - защита API с помощью Spring Security
- ✅ Redis кэширование - кэширование списка задач
- ✅ Dockerfile - контейнеризация приложения
- Созданы модели и репозитории для:
- Task, User с полным CRUD функционалом
- TaskRequest DTO с валидацией данных
- Redis: используется для кэширования списка всех задач. Позволяет значительно снизить время отклика API. Ключи формируются по шаблону tasksCache:all_tasks, время жизни кэша (TTL) — 30 минут.
- Slf4j: Логирование всех действий через Lombok Slf4j.
- SecurityConfig: Basic Authentication для защиты всех эндпоинтов кроме регистрации.
- GlobalExceptionHandler: Исключения обрабатываются централизованно для каждой сущности.
- Все DTO, принимаемые через POST и PUT запросы, проходят валидацию на корректность. Дополнительно для класса TaskRequest реализована кастомная аннотация для проверки статусов и переходов между ними.
- Реализована логика на основе паттерна "Стратегия" для управления переходами между статусами задач.
- Регистрация пользователей и аутентификация.
- Управление задачами (CRUD).
- Изменение статусов с валидацией переходов.
- Отправка email уведомлений при создании/изменении задач.
- Получение информации о доступных переходах статусов.
- Паттерн "Стратегия": для управления статусами задач реализован паттерн Strategy, который позволяет гибко управлять переходами между состояниями и выполнять соответствующую бизнес-логику.
- Redis: используется для кэширования списка задач. Позволяет существенно снизить нагрузку на базу данных. Ключи формируются динамически, с TTL 30 минут.
- Basic Authentication: все эндпоинты защищены с помощью Spring Security, кроме эндпоинта регистрации.
- Email уведомления: интегрирована отправка HTML писем через Spring Mail при создании и изменении задач.
- Автоматическое логирование: все операции логируются с помощью аннотации @Slf4j от Lombok.
- Кастомные валидации: реализованы отдельные валидаторы, чтобы вынести бизнес-валидации за пределы сервисного слоя.
- Comprehensive Testing: написаны unit и integration тесты с покрытием основного функционала.
- Docker: проект и база данных запускаются в Docker-окружении с использованием Docker Compose для удобства развертывания и управления контейнерами.
- Профилирование окружений (
application.yml,application-test.yml,application-prod.yml): используется механизм Spring Profiles для разделения конфигураций разработки, тестирования и продакшена. Настройки окружения (базы данных, Redis, логгирование, SMTP и т.д.) подгружаются в зависимости от активного профиля.
- Клонируйте репозиторий.
- Для запуска локально настройте переменные окружения в IDE:
MY_EMAIL=your_email@gmail.com MY_PASSWORD=your_app_password
- Запустите приложение:
mvn spring-boot:run
MY_EMAIL=your_email@gmail.com MY_PASSWORD="your_app_password" docker compose up -d- API: http://localhost:8888 (локально) или http://localhost:9778 (Docker)
- Swagger UI: http://localhost:8888/swagger-ui.html (локально) или http://localhost:9778/swagger-ui.html (Docker)
- Swagger docs: http://localhost:8888/api/v3/api-docs (для Postman проверки)
- Redis: localhost:6379
POST /api/v1/tasks - Создание задачи
GET /api/v1/tasks - Получение всех задач
GET /api/v1/tasks/{id} - Получение задачи по ID
PUT /api/v1/tasks/{id} - Обновление задачи
DELETE /api/v1/tasks/{id} - Удаление задачи
PATCH /api/v1/tasks/{id}/status - Изменение статуса
GET /api/v1/tasks/status/{status} - Фильтрация по статусу
GET /api/v1/tasks/{id}/transitions - Доступные переходы
GET /api/v1/tasks/status-info - Информация о статусах
POST /api/auth/register - Регистрация пользователя
В базе созданы тестовые пользователи для демонстрации:
- Email: qwe@qwe, Password: qwe
- Email: qwe@qwe.qwe, Password: qwe
src/
├── main/
│ ├── java/kg/manurov/tasktracker/
│ │ ├── controller/ # REST контроллеры
│ │ ├── service/ # Бизнес-логика
│ │ ├── strategy/ # Паттерн стратегия для статусов
│ │ ├── domain/ # Модели и DTO
│ │ ├── repositories/ # JPA репозитории
│ │ ├── config/ # Конфигурация
│ │ ├── exception/ # Кастомные исключения
│ │ ├── handler/ # Обработчики ошибок
│ │ └── validations/ # Кастомные валидаторы
│ └── resources/
│ ├── db/changelog/ # Liquibase миграции
│
└── test/ # Тесты
Запуск тестов: mvn test
Покрытие включает:
- Unit-тесты для TaskService (26 тестов)
- Integration-тесты для TaskRepository (20 тестов)
- Тесты загрузки контекста приложения
Все требования тестового задания выполнены ✅