Skip to content
 
 

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🏗️ ДоДырТим — Канбан-система с event-driven архитектурой

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


📋 Содержание


🎯 Цель проекта

Разработать канбан-систему, которая:

  • Работает в реальном времени — все изменения мгновенно отображаются у всех участников
  • Обрабатывает поток задач — создание, редактирование, перемещение, удаление
  • Поддерживает автоматизацию событий — уведомления, дедлайны, приглашения

Система имитирует продукт уровня Jira/Trello с event-driven архитектурой.

Целевая аудитория

  • Пользователи: сотрудники и команды, управляющие задачами
  • Администраторы: менеджеры и организаторы, контролирующие процессы

📦 Стек технологий

Фронтенд

Технология Описание
React 18 UI-библиотека
Vite Сборщик проекта
React Router DOM v7 Маршрутизация
@hello-pangea/dnd Drag & Drop для карточек
Axios HTTP-клиент
React Hot Toast Уведомления
CSS3 Адаптивная вёрстка

Бэкенд

Технология Описание
Go 1.21+ Язык программирования
Gin HTTP-фреймворк
GORM ORM для PostgreSQL
JWT (golang-jwt) Аутентификация
Gorilla WebSocket Real-time коммуникация
bcrypt Хеширование паролей

База данных

Технология Описание
PostgreSQL 15+ Реляционная база данных

Инфраструктура

Технология Описание
Docker Контейнеризация
Docker Compose Оркестрация сервисов
Nginx Веб-сервер (продакшен)
Railway Платформа для деплоя

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

Проект реализует event-driven подход, где все изменения мгновенно синхронизируются между пользователями через WebSocket.

┌─────────────────┐       HTTP/REST        ┌─────────────────┐
│                 │ ◄───────────────────── │                 │
│   React SPA     │                        │   Go API Server │
│   (Vite + Nginx)│ ──── WebSocket ──────► │   (Gin + GORM)  │
│                 │                        │                 │
└─────────────────┘                        └────────┬────────┘
                                                    │
                                             ┌──────▼──────┐
                                             │  PostgreSQL  │
                                             │   Database   │
                                             └─────────────┘

Поток данных:

  1. REST API — CRUD-операции над досками, колонками, задачами
  2. WebSocket — real-time синхронизация изменений
  3. PostgreSQL — хранение всех данных
  4. JWT-токены — аутентификация пользователей

Событийная модель:

  • Создание задачи → уведомление всем участникам доски
  • Перемещение задачи → мгновенное обновление канбан-доски
  • Приглашение в доску → real-time уведомление пользователю
  • Дедлайн задачи → предупреждение за 24 часа
  • Принятие/отклонение приглашения → уведомление администратору

📦 Функциональность

Канбан-доска

  • ✅ Три стандартные колонки: To Do, In Progress, Done
  • ✅ Создание кастомных колонок (название, цвет)
  • ✅ Drag & Drop карточек между колонками
  • ✅ Оптимистичное обновление UI

Карточка задачи

  • ✅ Название и описание
  • ✅ Приоритет (низкий, средний, высокий)
  • ✅ Теги (bug, feature, improvement, design и др.)
  • ✅ Дедлайн с визуальным отображением
  • ✅ Дата создания
  • ✅ Перемещение между колонками

Доски

  • ✅ Персональная доска создаётся автоматически при регистрации
  • ✅ Создание, переименование, удаление досок
  • ✅ Приглашение пользователей по email
  • ✅ Разграничение прав (владелец vs участник)

Уведомления (Real-time)

  • ✅ Новые задачи на доске
  • ✅ Перемещение задач между колонками
  • ✅ Дедлайн менее 24 часов
  • ✅ Принятие/отклонение приглашений
  • ✅ Бейдж непрочитанных уведомлений
  • ✅ Раздел «Уведомления» в боковом меню

Автоматизация событий

  • ✅ Автоматическая рассылка уведомлений при изменении задач
  • ✅ Проверка дедлайнов с отправкой предупреждений
  • ✅ Мгновенная синхронизация между всеми участниками доски

Аутентификация и роли

  • ✅ Регистрация с выбором роли (Пользователь / Администратор)
  • ✅ JWT-токены с сохранением сессии
  • ✅ Защищённые маршруты на фронтенде и middleware на бэкенде

🚀 Быстрый старт

Предварительные требования

  • Docker и Docker Compose
  • Либо: Node.js 22+, Go 1.21+, PostgreSQL 15+

🐳 Запуск через Docker (рекомендуется)

# 1. Клонируйте репозиторий
git clone https://github.com/LASTlK/unit_hack.git
cd unit_hack

# 2. Запустите все сервисы
docker-compose up --build

# 3. Откройте в браузере
http://localhost

Первая сборка займёт 3-5 минут (загрузка образов, установка зависимостей).

Что будет запущено:

  • PostgreSQL на порту 5432
  • Go API сервер на порту 8080
  • React приложение на порту 80

Запуск без Docker (для разработки)

1. Настройка базы данных

CREATE USER kanban_user WITH PASSWORD 'strong_password';
CREATE DATABASE kanbandb OWNER kanban_user;
GRANT ALL PRIVILEGES ON DATABASE kanbandb TO kanban_user;

2. backend

cd backend
go mod tidy
go run main.go

Сервер запустится на http://localhost:8080

3. frontend

cd frontend
npm install
npm run dev

Откройте http://localhost:5173

📡 API Эндпоинты

Аутентификация

Метод URL Описание
POST /api/auth/register Регистрация
POST /api/auth/login Вход

Доски

Метод URL Описание
GET /api/boards Список досок
POST /api/boards Создать доску
PUT /api/boards/:id Переименовать
DELETE /api/boards/:id Удалить
GET /api/boards/:id/members Участники
DELETE /api/boards/:bid/members/:mid Удалить участника

Колонки

Метод URL Описание
GET /api/columns?board_id= Список колонок
POST /api/columns Создать колонку
PUT /api/columns/:id Обновить
DELETE /api/columns/:id Удалить

Задачи

Метод URL Описание
GET /api/tasks?board_id= Список задач
POST /api/tasks Создать задачу
PUT /api/tasks/:id Обновить
DELETE /api/tasks/:id Удалить

Приглашения

Метод URL Описание
POST /api/boards/:id/invite Пригласить
GET /api/invitations Входящие
PUT /api/invitations/:id/accept Принять
PUT /api/invitations/:id/decline Отклонить

Уведомления

Метод URL Описание
GET /api/notifications Все уведомления
GET /api/notifications/count-unread Количество непрочитанных
PUT /api/notifications/read-all Отметить все прочитанными

WebSocket

ws://localhost:8080/ws?token=JWT — канал real-time синхронизации


🔐 Роли пользователей

Роль Возможности
Пользователь Создание/редактирование своих досок, Drag & Drop задач, получение уведомлений
Администратор Всё, что у пользователя + приглашение других в доску, удаление участников

При регистрации можно выбрать роль (user / admin).
Владелец доски автоматически становится её администратором.


✨ Особенности реализации

Event-driven архитектура

  • Все изменения мгновенно транслируются через WebSocket всем участникам
  • Сервер генерирует события: создание/удаление/перемещение задачи, дедлайны, приглашения
  • Клиенты автоматически обновляют UI при получении событий

Real-time синхронизация

  • WebSocket-подключение с автоматическим переподключением
  • Оптимистичные обновления UI при Drag & Drop
  • Согласованное отображение у всех пользователей доски

Автоматизация

  • Автоматическая проверка дедлайнов (предупреждение за 24 часа)
  • Рассылка уведомлений всем участникам доски
  • Обработка принятия/отклонения приглашений

Надёжность

  • JWT-токены с механизмом обновления
  • Сохранение сессии в localStorage
  • Автоматический редирект при истечении токена
  • Обработка ошибок на фронтенде (ErrorBoundary)

Интерфейс

  • Адаптивный дизайн (мобильные устройства)
  • Интуитивно понятный Drag & Drop
  • Визуальные индикаторы: приоритеты, теги, дедлайны
  • Бейджи непрочитанных уведомлений и приглашений

🚢 Развёртывание

Не успели по таймингам хакатона :(

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages