Skip to content

giv13/task-tracker

Repository files navigation

Планировщик задач

Многопользовательский планировщик задач, написанный в учебных целях на основе данного ТЗ с небольшими отклонениями и улучшениями.

Используемый стек

Backend

Java Spring Boot Spring Security (JWT) Spring Web Spring Data JPA Spring Data JDBC Spring for Apache Kafka Spring Scheduler Spring Mail Hibernate Postgres Liquibase Maven Kafka Docker Git CI/CD OpenAPI Swagger

Frontend

Nginx HTML CSS JavaScript jQuery

Особенности

  • Проект разделен на несколько сервисов: frontend, backend, scheduler (планировщик), mailer (рассыльщик писем).
  • Общие зависимости вынесены в отдельный сервис common во избежание дублирования кода.
  • Использование брокера сообщений (Apache Kafka) для обмена информацией между сервисами.
  • Авторизация на основе JWT. В том числе реализованы Refresh-токены. Хранение токенов в HttpOnly Cookie.
  • Валидация пароля с помощью Passay. Кастомные валидаторы: подтверждение пароля, проверка на уникальность, проверка часового пояса.
  • Стандартизация ответов от бэкенда (RestControllerAdvice).
  • Использование Liquibase для миграций.
  • Swagger для API-документации c рабочим решением авторизации на основе JWT.
  • Adminer (веб-интерфейс для управления базами данных) и Kafka UI (веб-интерфейс для Apache Kafka).
  • Сборка приложения осуществляется через Docker. При этом наружу торчит только Nginx, который выступает в роли обратного прокси.
  • CI/CD с помощью GitHub Actions. При пуше в основную ветку автоматически запускаются сборка образов, push образов в Docker Hub и развертывание кода на сервере. При этом, несмотря на то, что это монорепозиторий, ребилдятся только затронутые коммитом сервисы.

Что улучшено по сравнению с ТЗ

  • Добавлены категории.
  • Добавлены цвета и возможность выбора цвета для категории и задачи.
  • Добавлено перетаскивание категорий и задач для быстрой сортировки. Задачу, в том числе, можно перетащить в другую категорию или в "Выполненные".
  • Добавлена возможность менять настройки профиля.
  • В том числе можно отключить ежедневные отчеты.
  • В том числе добавлена возможность выбрать часовой пояс. На основе часового пояса пользователь видит даты создания и завершения задач.
  • Изменена логика планировщика. Сервис формирует отчеты не раз в сутки, а каждые 30 минут. При этом в выборку попадают только те пользователи, у которых сейчас полночь. То есть каждому пользователю отчет приходит в полночь по отношению к его выбранному часовому поясу.
  • Для каждого события свой топик в брокере сообщений. Всего 3 события: регистрация, смена пароля, ежедневный отчет по задачам. Также сделан dlt-топик для сохранения недоставленных сообщений.
  • При регистрации и смене пароля пользователю на почту приходит сообщение с доступами. Пароль при этом передается в топик в зашифрованном виде для безопасности.

Установка (Docker)

  1. Склонировать репозиторий

    git clone https://github.com/giv13/task-tracker.git
  2. Перейти в папку с репозиторием

    cd task-tracker
  3. Скопировать пример файла переменных окружения

    cp .env.example .env
  4. Открыть скопированный файл. В моем случае я открываю файл стандартным блокнотом Windows.

    notepad .env
  5. В файле задать основной порт для доступа к приложению, настройки для БД, Kafka, Kafka UI, SMTP, в JWT_SECRET задать сгенерированный секрет, в ENCRYPTOR_PASSWORD и ENCRYPTOR_SALT задать произвольные пароль и соль для шифрования данных для передачи в Kafka. Пример файла:

    PORT=80
    
    DB_NAME=task-tracker-db
    DB_USER=task-tracker-user
    DB_PASSWORD=task-tracker-pass
    
    JWT_SECRET=8927666ce0f474650328f3f905aeccd0211598a986e72fad36172474ec2a32f6
    
    KAFKA_USER_REGISTERED_TOPIC_NAME=task-tracker.user.registered
    KAFKA_USER_PASSWORD_CHANGED_TOPIC_NAME=task-tracker.user.password-changed
    KAFKA_USER_TASK_SUMMARY_TOPIC_NAME=task-tracker.user.task-summary
    KAFKA_USER_DLT_TOPIC_NAME=task-tracker.user.dlt
    
    KAFKA_UI_USER=kafka-ui-user
    KAFKA_UI_PASSWORD=kafka-ui-pass
    
    SMTP_HOST=smtp.gmail.com
    SMTP_PORT=587
    SMTP_USERNAME=your-username@gmail.com
    SMTP_PASSWORD=your-password
    
    ENCRYPTOR_PASSWORD=task-tracker
    ENCRYPTOR_SALT=8927666ce0f474650328f3f905aeccd0211598a986e72fad36172474ec2a32f6
  6. Развернуть приложение

    docker-compose up -d --build
  7. Приложение будет доступно по пути http://localhost:80/ (или на другом порту, указанном в переменной PORT). Чтобы остановить приложение и удалить все сервисы, выполните команду:

    docker-compose down

About

Планировщик задач на Java (микросервисы, Kafka)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published