Skip to content

KittyNicky/task-tracker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 

Repository files navigation

Проект "Task tracker"

Многопользовательский планировщик задач. Пользователи могут использовать его в качестве TODO листа.

Использованные технологии

  • Java
  • Maven
  • Backend
    • Spring Boot
    • Spring Security
    • Spring Session
    • Spring Kafka
    • Spring Scheduler
    • Spring Mail
    • JWT
  • Базы данных
    • PostgreSQL
    • Spring Data JPA
  • Docker и микросервисы
    • Контейнеры, образы, volumes, Dockerfile, Docker Compose
    • Брокер сообщений Kafka

Сервисы

Spring Boot приложение, реализующее REST API для работы с пользователями, сессиями, создаваемыми при авторизации, и задачами.

Работа с пользователями (доступно всем пользователям):

  • Регистрация
  • Авторизация

Работа с задачами (доступно авторизованным пользователям):

  • Создание
  • Получение
  • Редактирование
  • Удаление

Вместо сессий используется JWT. Выдаются только access token, без refresh, по которым авторизовываются запросы к REST API. Авторизация JWT реализованы на уровне Spring Security в виде фильтра, который достает access toke из запроса, декодирует и валидирует его.

Spring Boot приложение с двумя модулями - Spring Mail и Spring AMQP.

С помощью Spring AMQP приложение подключается к Kafka и создает топик EMAIL_SENDING_TASKS, после чего подписывается на сообщения, поступающие от планировщика и бэкенд-сервиса.

Для каждого полученного сообщения, содержимое которого десериализуется в экземпляр модели, пользуемся модулем Spring Mail, чтобы отправить письмо.

Spring Boot приложение "планировщик"

Задача сервиса - раз в сутки итерировать всех пользователей, и формировать для них отчёты о задачах и изменениях в них за сутки.

  • Пользователям, у которых на конец дня есть невыполненные задача, отправляется емейл вида “У вас осталось N несделанных задач”. Тело письма содержит заголовки этих задач (не более 5)
  • Пользователям, у которых за последние сутки 1 или более задач были отмечены как сделанные, отправляется емейл вида “За сегодня вы выполнили N задач”. Тело письма содержит заголовки выполненных задач (не более 5)
  • Пользователям, для которых верны оба условия выше, отправляется емейл и со списком несделанных, и сделанных за последние сутки задач Spring Scheduler по Cron выражению каждую полночь вызывает метод, читающий список пользователей, анализирующий их задачи, и формирующий емейлы для отправки. Сформированные емейлы упаковываются в классы-модели и отправляются в Kafka топик.

PostgreSQL

Таблица Users

Колонка Тип Комментарий
id bigint Айди пользователя, автоинкремент, первичный ключ
email varchar Email пользователя
username varchar Логин пользователя
password varchar Пароль пользователя в зашифрованном виде с помощью BCrypt

Таблица Tasks

Колонка Тип Комментарий
id uuid Айди задачи, первичный ключ
user_id bigint Айди пользователя, внешний ключ
title varchar Заголовок задачи
text varchar Текст задачи
status varchar Статус задачи
updated_at timestamp Дата изменения статуса задачи

Kafka

Kafka запускается в контексте Docker Compose в кол-ве одной узла, принимающей запросы от других контейнеров внутри Docker.

Деплой

  • Установить Docker и Git на сервере
  • Клонировать репозиторий проекта task-tracker:
git clone https://github.com/KittyNicky/task-tracker.git
  • Заполнить переменные окружения файла .env
EMAIL_USERNAME=<email пользователя, от которого будут отправляться емейлы>
EMAIL_PASSWORD=<пароль email пользователя/сгенерированный пароль приложения>
DB_USERNAME=<Имя пользователя базы данных>
DB_PASSWORD=<Пароль пользователя базы данных>
SECRET_KEY=<JWT Access token>
  • Запустить docker compose
cd task-tracker
docker compose -f compose.yaml -p task-tracker up -d

После создания и запуска контейнеров будет запущено 6 контейнеров

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published