|
2 | 2 |
|
3 | 3 | 
|
4 | 4 |
|
5 |
| - |
| 5 | + |
| 6 | + |
| 7 | + |
| 8 | + |
| 9 | + |
| 10 | + |
6 | 11 | 
|
| 12 | + |
7 | 13 |
|
8 | 14 | ---
|
9 | 15 |
|
10 | 16 | ## 📝 Описание проекта
|
11 | 17 |
|
12 |
| -**java-task-manager** — это консольное приложение для управления задачами, созданное мной с нуля для упрощения планирования и отслеживания рабочего процесса. Это учебный проект, который помог мне отточить навыки работы с **Java Core** и разобраться в принципах управления задачами в памяти приложения. Это не просто программа — это инструмент, который помогает организовать хаос и привести дела в порядок. |
| 18 | +**java-task-manager** — это современное веб-приложение для управления задачами, разработанное с использованием **Spring Boot**. Проект позволяет эффективно организовывать задачи, эпики и подзадачи, отслеживать их статус и историю просмотров. Это учебный проект, созданный для отработки навыков работы с **Spring Framework**, **JPA**, **Redis**, и другими технологиями, а также для реализации полноценного REST API с документацией через Swagger. |
13 | 19 |
|
14 | 20 | **Почему я создал этот проект?**
|
15 |
| -- Чтобы научиться управлять задачами без внешних баз данных. |
16 |
| -- Отработать работу с приоритетами и временными метками. |
17 |
| -- Реализовать функционал истории просмотров задач. |
| 21 | +- Чтобы изучить разработку RESTful-приложений с использованием Spring Boot. |
| 22 | +- Освоить интеграцию с Redis для хранения истории просмотров. |
| 23 | +- Практиковать тестирование с JUnit и Mockito. |
| 24 | +- Реализовать контейнеризацию с помощью Docker и Docker Compose. |
18 | 25 |
|
19 | 26 | **Какую проблему решает?**
|
20 |
| -Если вы хотите навести порядок в своих задачах или попрактиковаться в управлении временем, java-task-manager станет вашим помощником. Всё управление происходит в одном месте — просто и удобно. |
| 27 | +Проект помогает структурировать рабочие процессы, предоставляя удобный REST API для управления задачами, эпиками и подзадачами. Он подходит как для личного использования, так и для изучения современных подходов к разработке серверных приложений. |
21 | 28 |
|
22 | 29 | **Технологии:**
|
23 |
| -- **Java 21** — ядро проекта. |
24 |
| -- **HttpServer** и **HttpExchange** — для локального сервера. |
25 |
| -- **JUnit 5** — для тестирования кода. |
| 30 | +- **Java 21** — Язык программирования. |
| 31 | +- **Spring Boot 3.3** — Основа приложения, включая Spring Web, Spring Data JPA. |
| 32 | +- **Redis 7.2** — Для хранения истории просмотров. |
| 33 | +- **H2 Database 2.2** — Встроенная база данных для хранения задач, эпиков и подзадач. |
| 34 | +- **Docker** и **Docker Compose** — Для контейнеризации приложения и зависимостей. |
| 35 | +- **JUnit 5** и **Mockito** — Для модульного и интеграционного тестирования. |
| 36 | +- **MapStruct** — Для маппинга между DTO и сущностями. |
| 37 | +- **Swagger (Springdoc)** — Для документации API. |
| 38 | +- **Lombok** — Для упрощения кода. |
26 | 39 |
|
27 | 40 | ---
|
28 | 41 |
|
29 | 42 | ## 🚀 Возможности
|
30 | 43 |
|
31 |
| -Вот что умеет **java-task-manager**: |
32 |
| -- **Управление задачами:** |
33 |
| - - Создание, обновление и удаление задач (всё хранится в памяти). |
34 |
| -- **Время и приоритеты:** Привязка задач ко времени и установка уровней приоритета. |
| 44 | +**java-task-manager** предоставляет следующие функции: |
| 45 | +- **Управление задачами, эпиками и подзадачами:** |
| 46 | + - Создание, обновление, получение и удаление через REST API. |
| 47 | + - Поддержка временных меток (`startTime`, `endTime`, `duration`) и статусов (`NEW`, `IN_PROGRESS`, `DONE`). |
35 | 48 | - **Типы задач:**
|
36 |
| - - **Эпики** — крупные задачи. |
37 |
| - - **Задачи** — основные единицы работы. |
38 |
| - - **Подзадачи** — детализация эпиков. |
39 |
| -- **История просмотров:** Отслеживание задач, которые вы просматривали. |
40 |
| -- **Локальный сервер:** Работает на порту 8080. |
41 |
| -- **Эндпоинты API:** |
42 |
| - - `/tasks` — список всех задач. |
43 |
| - - `/epics` — работа с эпиками. |
44 |
| - - `/subtasks` — управление подзадачами. |
45 |
| - - `/history` — история просмотров. |
46 |
| - - `/prioritized` — задачи по приоритету. |
| 49 | + - **Эпики** — Крупные задачи, содержащие подзадачи. |
| 50 | + - **Задачи** — Независимые единицы работы. |
| 51 | + - **Подзадачи** — Детализация эпиков, связанные с ними. |
| 52 | +- **Приоритизация:** Получение списков задач, эпиков и подзадач, отсортированных по статусу (`IN_PROGRESS` → `NEW` → `DONE`) и времени завершения. |
| 53 | +- **История просмотров:** Отслеживание последних 10 просмотров задач, эпиков и подзадач (хранится в Redis). |
| 54 | +- **REST API:** |
| 55 | + - `/task` — Управление задачами. |
| 56 | + - `/epic` — Управление эпиками. |
| 57 | + - `/subtask` — Управление подзадачами. |
| 58 | + - `/history` — Получение истории просмотров. |
| 59 | + - `/prioritized` — Получение приоритетных списков. |
| 60 | +- **Документация API:** Доступна через Swagger UI (`/swagger-ui.html`). |
| 61 | +- **Тестирование:** Написаны тесты для контроллеров и сервисов с использованием JUnit и Mockito. |
| 62 | +- **Контейнеризация:** Возможность запуска приложения и Redis в Docker через Docker Compose. |
47 | 63 |
|
48 | 64 | ---
|
49 | 65 |
|
50 | 66 | ## 🛠️ Как запустить проект
|
51 | 67 |
|
52 | 68 | ### Требования
|
53 |
| -- **Java 21** или выше. |
54 |
| -- Любая операционная система: Windows, macOS, Linux. |
55 |
| - |
56 |
| -### Инструкция |
57 |
| -1. **Склонируйте репозиторий:** |
| 69 | +- **Java 21** или выше (для локального запуска). |
| 70 | +- **Docker** и **Docker Compose** (для запуска в контейнерах). |
| 71 | +- **Maven** (для сборки проекта). |
| 72 | +- Операционная система: Windows, macOS, Linux. |
| 73 | + |
| 74 | +### Инструкция для локального запуска |
| 75 | +1. **Склонируйте репозиторий:** |
| 76 | + ```bash |
| 77 | + git clone https://github.com/1EVILGUN1/java-task-manager.git |
| 78 | + ``` |
| 79 | +2. **Перейдите в папку проекта:** |
| 80 | + ```bash |
| 81 | + cd java-task-manager |
| 82 | + ``` |
| 83 | +3. **Убедитесь, что Redis запущен локально или в Docker:** |
| 84 | + ```bash |
| 85 | + docker run -d --name redis -p 6379:6379 redis:7.2 |
| 86 | + ``` |
| 87 | +4. **Соберите проект с помощью Maven:** |
| 88 | + ```bash |
| 89 | + mvn clean install |
| 90 | + ``` |
| 91 | +5. **Запустите приложение:** |
| 92 | + ```bash |
| 93 | + mvn spring-boot:run |
| 94 | + ``` |
| 95 | +6. **Проверьте работу:** |
| 96 | + - Откройте браузер и перейдите на `http://localhost:8080/swagger-ui.html` для доступа к документации API. |
| 97 | + - Используйте эндпоинты, например, `http://localhost:8080/task` для работы с задачами. |
| 98 | + |
| 99 | +### Инструкция для запуска с Docker Compose |
| 100 | +1. **Склонируйте репозиторий (если ещё не сделано):** |
| 101 | + ```bash |
58 | 102 | git clone https://github.com/1EVILGUN1/java-task-manager.git
|
59 |
| -2. **Перейдите в папку проекта:** |
| 103 | + ``` |
| 104 | +2. **Перейдите в папку проекта:** |
| 105 | + ```bash |
60 | 106 | cd java-task-manager
|
61 |
| -3. **Запустите приложение:** |
62 |
| - - В среде разработки (IntelliJ IDEA, Eclipse, VSCode): найдите файл `Main.java` и нажмите "Run". |
63 |
| - - Или через терминал: |
64 |
| - javac Main.java |
65 |
| - java Main |
66 |
| -4. **Проверьте работу:** |
67 |
| - Откройте браузер и перейдите на `http://localhost:8080`. |
| 107 | + ``` |
| 108 | +3. **Запустите приложение и Redis с помощью Docker Compose:** |
| 109 | + ```bash |
| 110 | + docker-compose up -d --build |
| 111 | + ``` |
| 112 | +4. **Проверьте работу:** |
| 113 | + - Перейдите на `http://localhost:8080/swagger-ui.html` для проверки API. |
| 114 | + - Для остановки: |
| 115 | + ```bash |
| 116 | + docker-compose down |
| 117 | + ``` |
| 118 | + |
| 119 | +--- |
| 120 | + |
| 121 | +## 🧪 Тестирование |
68 | 122 |
|
69 |
| -Если всё сделано верно, сервер запустится, и вы сможете взаимодействовать с задачами! |
| 123 | +Проект включает тесты для: |
| 124 | +- **Контроллеров**: Проверка эндпоинтов с использованием `@WebMvcTest` и Mockito для имитации сервисов. |
| 125 | +- **Сервисов**: Проверка бизнес-логики с использованием `@SpringBootTest` и Mockito для имитации репозиториев. |
| 126 | + |
| 127 | +Запуск тестов: |
| 128 | +```bash |
| 129 | +mvn test |
| 130 | +``` |
70 | 131 |
|
71 | 132 | ---
|
72 | 133 |
|
73 | 134 | ## 📋 Планы на будущее
|
74 | 135 |
|
75 |
| -Я планирую развивать проект дальше: |
76 |
| -- Добавить больше тестов с использованием **JUnit**. |
77 |
| -- Улучшить производительность работы с задачами в памяти. |
78 |
| -- Расширить API, например, добавить эндпоинт `/tasks/completed` для завершенных задач. |
| 136 | +- Добавить эндпоинт `/tasks/completed` для получения завершенных задач. |
| 137 | +- Реализовать аутентификацию и авторизацию через Spring Security. |
| 138 | +- Добавить поддержку PostgreSQL как альтернативной базы данных. |
| 139 | +- Расширить тестовое покрытие, включая интеграционные тесты для работы с Redis. |
| 140 | +- Оптимизировать производительность сортировки в методе `/prioritized`. |
| 141 | +- Добавить CI/CD через GitHub Actions для автоматической сборки и тестирования. |
79 | 142 |
|
80 | 143 | ---
|
81 | 144 |
|
82 | 145 | ## 🌟 Почему стоит попробовать?
|
83 | 146 |
|
84 |
| -- **Простота:** Минимум зависимостей, всё в одном месте. |
85 |
| -- **Практичность:** Удобное управление задачами и приоритетами. |
86 |
| -- **Обучение:** Отличный пример для изучения Java Core. |
| 147 | +- **Мощный стек технологий:** Spring Boot, Redis, H2, Docker — всё, что нужно для современного приложения. |
| 148 | +- **Полноценный REST API:** Удобный интерфейс с документацией через Swagger. |
| 149 | +- **Тестирование:** Надежный код с покрытием тестами для контроллеров и сервисов. |
| 150 | +- **Контейнеризация:** Легкий запуск приложения и Redis с помощью Docker Compose. |
| 151 | +- **Обучение:** Отличный пример для изучения Spring Framework и микросервисной архитектуры. |
87 | 152 |
|
88 | 153 | ---
|
89 | 154 |
|
90 | 155 | ## 📬 Контакты
|
91 | 156 |
|
92 |
| -- **Email:** [yasha.golotin@mail.ru](mailto:yasha.golotin.mail.ru) |
| 157 | +- **Email:** [yasha.golotin@mail.ru](mailto:yasha.golotin@mail.ru) |
93 | 158 |
|
94 | 159 | ---
|
95 | 160 |
|
96 | 161 | ## 🤝 Как помочь проекту
|
97 | 162 |
|
98 |
| -Если хотите внести свой вклад, я буду рад! Форкните репозиторий, предложите свои идеи через pull request и присоединяйтесь к развитию java-task-manager. |
| 163 | +Хотите внести свой вклад? Форкните репозиторий, предложите улучшения через pull request или поделитесь идеями! Возможные направления: |
| 164 | +- Расширение функционала API. |
| 165 | +- Улучшение тестового покрытия. |
| 166 | +- Оптимизация работы с Redis или H2. |
| 167 | +- Улучшение `docker-compose.yml` или Dockerfile. |
| 168 | + |
| 169 | +Присоединяйтесь к развитию **java-task-manager**! |
| 170 | + |
| 171 | +--- |
| 172 | + |
| 173 | +## 📚 Структура проекта |
| 174 | + |
| 175 | +- **`src/main/java/service/task.manager`**: |
| 176 | + - `controller` — REST-контроллеры для обработки HTTP-запросов. |
| 177 | + - `dto` — Объекты передачи данных (DTO) для задач, эпиков и подзадач. |
| 178 | + - `exception` — Пользовательские исключения и обработчик ошибок. |
| 179 | + - `mapper` — MapStruct-мапперы для преобразования между DTO и сущностями. |
| 180 | + - `model` — JPA-сущности (`Task`, `Epic`, `Subtask`) и перечисления. |
| 181 | + - `repository` — Spring Data JPA репозитории для работы с базой данных. |
| 182 | + - `service` — Интерфейсы и реализации бизнес-логики. |
| 183 | +- **`src/test`** — Тесты для контроллеров и сервисов (JUnit, Mockito). |
| 184 | +- **`Dockerfile`** — Для сборки образа приложения. |
| 185 | +- **`docker-compose.yml`** — Для запуска приложения и Redis. |
| 186 | + |
| 187 | +--- |
| 188 | + |
| 189 | +## 🐳 Примечания по Docker |
| 190 | + |
| 191 | +- **Dockerfile**: Настроен для сборки Spring Boot приложения на базе `eclipse-temurin:21-jre-jammy`. |
| 192 | +- **Docker Compose**: Автоматически запускает приложение и Redis, связывая их через сеть `task-manager-network`. |
| 193 | +- **Конфигурация**: Настройки Redis и H2 задаются через переменные окружения в `docker-compose.yml` или `application.properties`. |
| 194 | + |
| 195 | +--- |
| 196 | + |
| 197 | +## 🔗 Полезные ссылки |
| 198 | + |
| 199 | +- [Swagger UI](http://localhost:8080/swagger-ui.html) — Документация API. |
| 200 | +- [Spring Boot](https://spring.io/projects/spring-boot) — Документация фреймворка. |
| 201 | +- [Redis](https://redis.io) — Документация по Redis. |
| 202 | +- [Docker](https://docs.docker.com) — Руководство по Docker. |
| 203 | +- [Docker Compose](https://docs.docker.com/compose/) — Документация по Docker Compose. |
| 204 | + |
| 205 | +--- |
| 206 | + |
| 207 | +**java-task-manager** — это не просто менеджер задач, это шаг к освоению современных технологий разработки! 🚀 |
0 commit comments