Java Kanban - это система управления задачами, реализованная на Java с использованием HTTP API. Проект представляет собой полнофункциональный трекер задач с поддержкой эпиков, подзадач и истории просмотров.
- Task - обычные задачи с названием, описанием, статусом, продолжительностью и временем начала
- Epic - крупные задачи, состоящие из подзадач
- Subtask - подзадачи, принадлежащие эпику
NEW- новая задачаIN_PROGRESS- задача в работеDONE- выполненная задача
- ✅ Создание, обновление и удаление задач всех типов
- ✅ Автоматическое управление статусами эпиков на основе подзадач
- ✅ История просмотров задач
- ✅ Приоритизация задач по времени начала
- ✅ Проверка пересечений времени выполнения задач
- ✅ Сохранение и загрузка данных из CSV файла
- ✅ HTTP API для взаимодействия с системой
- ✅ Полное покрытие тестами
Task- базовый класс для всех задачEpic- эпик, содержащий подзадачиSubtask- подзадача с привязкой к эпикуStatus- перечисление статусов задач
TaskManager- интерфейс для управления задачамиInMemoryTaskManager- реализация в памятиFileBackedTaskManager- реализация с сохранением в файлHistoryManager- управление историей просмотровInMemoryHistoryManager- реализация истории в памяти
HttpTaskServer- основной HTTP сервер на порту 8080TaskHandler- обработчик для обычных задачEpicHandler- обработчик для эпиковSubtaskHandler- обработчик для подзадачHistoryHandler- обработчик для историиPrioritizedHandler- обработчик для приоритизированных задач
GET /tasks- получить все задачиGET /tasks/{id}- получить задачу по IDPOST /tasks- создать новую задачуPOST /tasks(с ID) - обновить существующую задачуDELETE /tasks/{id}- удалить задачу
GET /epics- получить все эпикиGET /epics/{id}- получить эпик по IDGET /epics/{id}/subtasks- получить подзадачи эпикаPOST /epics- создать новый эпикDELETE /epics/{id}- удалить эпик
GET /subtasks- получить все подзадачиGET /subtasks/{id}- получить подзадачу по IDPOST /subtasks- создать новую подзадачуPOST /subtasks(с ID) - обновить существующую подзадачуDELETE /subtasks/{id}- удалить подзадачу
GET /history- получить историю просмотровGET /prioritized- получить приоритизированные задачи
Статус эпика автоматически обновляется на основе статусов подзадач:
- Если все подзадачи имеют статус
NEW→ эпикNEW - Если все подзадачи имеют статус
DONE→ эпикDONE - В остальных случаях → эпик
IN_PROGRESS
Задачи автоматически сортируются по времени начала выполнения. Система проверяет пересечения времени выполнения и предотвращает создание конфликтующих задач.
Система ведет историю просмотров задач с автоматическим удалением дубликатов и обновлением при повторных просмотрах.
Данные сохраняются в CSV формате в файл tasksFile.csv с поддержкой загрузки при старте приложения.
src/ru/practicum/task_tracker/
├── task/ # Модели данных
│ ├── Task.java
│ ├── Epic.java
│ ├── Subtask.java
│ └── Status.java
├── manager/ # Менеджеры
│ ├── TaskManager.java
│ ├── InMemoryTaskManager.java
│ ├── FileBackedTaskManager.java
│ ├── HistoryManager.java
│ └── InMemoryHistoryManager.java
├── http/ # HTTP сервер
│ ├── HttpTaskServer.java
│ ├── handler/ # Обработчики запросов
│ ├── adapter/ # Адаптеры для JSON
│ └── Exception/ # Исключения
├── CSVFormatter.java # Форматирование CSV
├── Managers.java # Фабрика менеджеров
└── Main.java # Демонстрация функциональности
Проект включает комплексные тесты:
- Unit тесты для всех менеджеров
- HTTP API тесты
- Тесты истории просмотров
- Тесты приоритизации задач
- Gson - для JSON сериализации/десериализации
- JUnit 5 - для тестирования
- Java HTTP Server - встроенный HTTP сервер
- Telegram - @sobolev_rs