Многопользовательский планировщик задач в стиле Trello с микросервисной архитектурой
Task Tracker API — это современное решение для управления задачами, вдохновленное функциональностью Trello. Проект реализован с использованием микросервисной архитектуры и предоставляет полнофункциональный REST API для создания TODO-листов.
- Java 17
- Gradle
- Spring Framework:
- Spring Boot
- Spring Web
- Spring Security (JWT)
- Spring Data JPA
- Spring for Apache Kafka
- Spring Scheduler
- Spring Mail
- PostgreSQL
- Liquibase
- Apache Kafka
- JUnit & Mockito
- Testcontainers
- Docker
- Swagger (OpenAPI)
- CI/CD, GitHub Actions
Проект построен на основе микросервисной архитектуры с моно-репозиторием и включает три основных микросервиса:
Основной сервис для работы с бизнес-логикой
- REST API для управления пользователями
- Система аутентификации и авторизации (JWT)
- Интеграция с Kafka для отправки уведомлений в топик
Сервис уведомлений для отправки email
- Подписка на Kafka топик
EMAIL_SENDING_TASKS - Автоматическая десериализация сообщений
- Отправка email через SMTP
Сервис планировщика для автоматической отчетности
- Ежедневное формирование отчетов о задачах
- Анализ изменений за сутки для каждого пользователя
- Автоматическая отправка сводок через Kafka в топик каждую полночь
Автоматизированный процесс развертывания включает:
-
Continuous Integration:
- Автоматическая сборка Docker образов
- Публикация образов в Docker Hub
-
Continuous Deployment:
- Автоматический деплой на удаленный сервер
- Запуск при каждом push в главную ветку
- Установить Docker Desktop на локальную машину
- Установить Git для клонирования репозитория
-
Склонируйте репозиторий приложения:
git clone https://github.com/IsaIsmailzade/task-tracker.git
-
Перейдите в корневую папку проекта:
cd task-tracker -
Сделайте копию файла .env.example с новым названием:
cp .env.example .env
-
Настройте переменные окружения в новом файле. Вставьте свои данные для настройки отправки сообщений по протоколу SMTP. Можно использовать SMTP-сервис Mail.ru.
# Образец сконфигурированного .env файла # База данных DB_URL=jdbc:postgresql://db:5432/task_tracker DB_USER=postgres DB_PASSWORD=1234 DB_NAME=task_tracker DB_DRIVER=org.postgresql.Driver # JWT настройки JWT_SECRET=secret_key # Генерация секретного ключа: openssl rand -hex 32 JWT_ACCESS_TOKEN_EXPIRATION=1d # Kafka конфигурация KAFKA_BOOTSTRAP_SERVERS=kafka:29092 KAFKA_TOPIC=EMAIL_SENDING_TASKS KAFKA_CONSUMER_GROUP_ID=email-sender-consumer # SMTP настройки (пример для Mail.ru) MAIL_HOST=smtp.mail.ru MAIL_PORT=587 [email protected] MAIL_PASSWORD=password # Пароль можете создать с помощью инструкции отсюда: https://help.mail.ru/mail/mailer/password/ # Планировщик SCHEDULER_CRON=0 0 0 * * ? SCHEDULER_CRON_NEW=@daily SCHEDULER_TASKS_COUNT_LIMIT=5 SCHEDULER_MESSAGE_TITLE=Task Tracker: Day's Report
-
(Опционально) Если хотите проверить работоспособность планировщика, измените почтовые адреса на свои в этом SQL-скрипте миграции.
Также надо изменить аннотацию @Scheduled на тестовую в классе ReportService, чтобы он отправлял отчет на почту не в полночь, а каждые 2 минуты. -
Запустите приложение:
docker-compose -f compose-local.yaml up --build
После запуска приложения документация Swagger UI будет доступна по адресу:
🔗 http://localhost:8080/swagger-ui/index.html
- Запустите Docker Desktop.
- Перейдите в папку микросервиса
Откройте терминал и перейдите в директорию микросервиса, в котором вы хотите запустить тесты:cd task-tracker-*
-
В зависимости от вашей операционной системы выполните следующие действия:
Выполните следующую команду для очистки и запуска тестов:
gradlew.bat clean test- Предоставьте права на выполнение Gradle wrapper:
chmod +x gradlew
- Запустите тесты:
./gradlew clean test
- Предоставьте права на выполнение Gradle wrapper:
task-tracker/
├── .github/workflows/ # CI/CD конфигурация
├── task-tracker-backend/ # Основной REST API сервис
├── task-tracker-email-sender/ # Сервис отправки email
├── task-tracker-scheduler/ # Сервис планировщика
├── compose.yaml # Конфигурация контейнеров
└── README.md
- Сделайте Fork репозитория
- Создайте ветку для новой функции (
git checkout -b feature/new-feature) - Зафиксируйте изменения (
git commit -m 'Add new feature') - Отправьте в ветку (
git push origin feature/new-feature) - Создайте Pull Request
Isa Ismailzade
- GitHub: @IsaIsmailzade
- Telegram: @isa_ismailzade
⭐ Если понравился проект, поставьте звездочку!