Главное Авторские колонки Вакансии Вопросы
111 0 В избр. Сохранено
Авторизуйтесь
Вход с паролем

Как я создал собственный менеджер задач Делайка

Примерно год назад на работе мы начали обсуждать внедрение менеджера задач для нашей команды. Рассмотренные решения выглядели функционально, но их стоимость оказалась слишком высокой для нашего бюджета. Тогда мой руководитель спросил:«А сможешь ли ты сделать что-то своё, простое, но удобное для наших задач?»
Мнение автора может не совпадать с мнением редакции

Так появилась Делайка — менеджер задач, созданный «изнутри» под реальные нужды команды.


Архитектура и стек

С самого начала я хотел, чтобы проект был лёгким, автономным и простым в установке. Поэтому выбрал:

  1. Backend: Java 17 + Spring Boot
  2. Frontend: Thymeleaf + Tailwind CSS
  3. База данных: PostgreSQL
  4. Уведомления: WebSocket (STOMP поверх SockJS)
  5. Telegram-интеграция: Java TelegramBots API
  6. Сборка и деплой: Maven + systemd unit на сервере

Приложение — монолитное, но структурировано по слоям:

  1. controller — обработчики HTTP-запросов, WebSocket и REST API;
  2. service — бизнес-логика (создание задач, уведомления, Telegram-интеграция);
  3. repository — работа с базой через Spring Data JPA;
  4. entity — модели данных.

Основные возможности

  1. Создание и редактирование задач и проектов;
  2. Статусы и логика переходов задач;
  3. Архивирование завершённых задач;
  4. Комментарии и обсуждения;
  5. Сортировка и фильтрация по дате, статусу, исполнителю;
  6. Статистика по пользователям и проектам;
  7. Уведомления о новых событиях в реальном времени;
  8. Telegram-бот для получения уведомлений.
  9. Интеграция с Active Directory

Как всё начиналось

Первая версия Делайки была всего одной страницей с таблицей задач и формой для создания новой.

Всё — без фреймворков, просто Spring Boot и Thymeleaf.

Когда стало понятно, что инструмент прижился, я начал добавлять функционал:

  1. фильтры и сортировки,
  2. роли пользователей (админ, модератор, исполнитель),
  3. архив завершённых задач,
  4. статистику.

Со временем появилось и уведомление в реальном времени. Для этого я добавил WebSocket-канал /user/queue/notifications, через который фронтенд получает сообщения о новых задачах, комментариях и изменениях статуса.

Трудности и заброшенный чат

После основного функционала я решил сделать раздел с сообщениями — хотел реализовать что-то вроде Rocket.Chat:

личные переписки, закрытые каналы и общие чаты.

Но столкнулся с неожиданной проблемой: конфликт уведомлений.

WebSocket, который обслуживал уведомления о задачах, начал пересекаться с уведомлениями о новых сообщениях.

В итоге один канал блокировал другой, а сообщения иногда просто терялись.

Несколько дней я пытался развести логику уведомлений по разным топикам, но столкнулся с трудностями синхронизации сессий пользователей и decided приостановить разработку этого раздела — иначе пострадала бы стабильность основного функционала.

Уведомления и Telegram-бот

Так родилась идея вынести часть уведомлений в Telegram.

Делайка — браузерная система, и у нас она развёрнута на IP, без домена и HTTPS.

Из-за этого нативные уведомления работают только при открытой вкладке.

Я реализовал Telegram-бота, который подключается к пользователю через deep link /start <код>:

  1. В профиле пользователя генерируется уникальный код и ссылка.
  2. Пользователь открывает её в Telegram и авторизуется.
  3. Бот сохраняет chat_id и связывает его с пользователем.
  4. После этого бот отправляет уведомления о новых задачах, комментариях, изменениях статуса и т.д.

Так пользователи всегда в курсе происходящего, даже без открытого браузера.

Демо

Сейчас Делайка доступна для тестирования: https://delajka.ru.

Попробуйте создать проект, задачи, назначить исполнителей — и дайте обратную связь.

Мне важно мнение разработчиков: удобен ли интерфейс, как реализовано уведомление, и стоит ли двигаться дальше (например, в сторону open-source или SaaS-версии).

Итог

Для меня Делайка стала не просто pet-проектом, а практическим примером того,

как из внутренней задачи компании можно вырастить полноценный продукт

0
В избр. Сохранено
Авторизуйтесь
Вход с паролем