Skip to content

Commit bdece45

Browse files
committed
feat:added readme,docker-compose
1 parent 70532bb commit bdece45

File tree

6 files changed

+660
-47
lines changed

6 files changed

+660
-47
lines changed

README.md

Lines changed: 156 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -2,97 +2,206 @@
22

33
![Task-manager Banner](image_task-manager.jpeg)
44

5-
![Java](https://img.shields.io/badge/Java-21-orange)
5+
![Java](https://img.shields.io/badge/Java-21-orange)
6+
![Spring](https://img.shields.io/badge/Spring-3.3-green)
7+
![Redis](https://img.shields.io/badge/Redis-7.2-red)
8+
![H2](https://img.shields.io/badge/H2-2.2-blue)
9+
![Docker](https://img.shields.io/badge/Docker-27.0-blue)
10+
![Docker Compose](https://img.shields.io/badge/Docker_Compose-3.8-blue)
611
![JUnit](https://img.shields.io/badge/JUnit-5-orange)
12+
![Mockito](https://img.shields.io/badge/Mockito-5.12-yellow)
713

814
---
915

1016
## 📝 Описание проекта
1117

12-
**java-task-manager** — это консольное приложение для управления задачами, созданное мной с нуля для упрощения планирования и отслеживания рабочего процесса. Это учебный проект, который помог мне отточить навыки работы с **Java Core** и разобраться в принципах управления задачами в памяти приложения. Это не просто программа — это инструмент, который помогает организовать хаос и привести дела в порядок.
18+
**java-task-manager** — это современное веб-приложение для управления задачами, разработанное с использованием **Spring Boot**. Проект позволяет эффективно организовывать задачи, эпики и подзадачи, отслеживать их статус и историю просмотров. Это учебный проект, созданный для отработки навыков работы с **Spring Framework**, **JPA**, **Redis**, и другими технологиями, а также для реализации полноценного REST API с документацией через Swagger.
1319

1420
**Почему я создал этот проект?**
15-
- Чтобы научиться управлять задачами без внешних баз данных.
16-
- Отработать работу с приоритетами и временными метками.
17-
- Реализовать функционал истории просмотров задач.
21+
- Чтобы изучить разработку RESTful-приложений с использованием Spring Boot.
22+
- Освоить интеграцию с Redis для хранения истории просмотров.
23+
- Практиковать тестирование с JUnit и Mockito.
24+
- Реализовать контейнеризацию с помощью Docker и Docker Compose.
1825

1926
**Какую проблему решает?**
20-
Если вы хотите навести порядок в своих задачах или попрактиковаться в управлении временем, java-task-manager станет вашим помощником. Всё управление происходит в одном месте — просто и удобно.
27+
Проект помогает структурировать рабочие процессы, предоставляя удобный REST API для управления задачами, эпиками и подзадачами. Он подходит как для личного использования, так и для изучения современных подходов к разработке серверных приложений.
2128

2229
**Технологии:**
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** — Для упрощения кода.
2639

2740
---
2841

2942
## 🚀 Возможности
3043

31-
Вот что умеет **java-task-manager**:
32-
- **Управление задачами:**
33-
- Создание, обновление и удаление задач (всё хранится в памяти).
34-
- **Время и приоритеты:** Привязка задач ко времени и установка уровней приоритета.
44+
**java-task-manager** предоставляет следующие функции:
45+
- **Управление задачами, эпиками и подзадачами:**
46+
- Создание, обновление, получение и удаление через REST API.
47+
- Поддержка временных меток (`startTime`, `endTime`, `duration`) и статусов (`NEW`, `IN_PROGRESS`, `DONE`).
3548
- **Типы задач:**
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.
4763

4864
---
4965

5066
## 🛠️ Как запустить проект
5167

5268
### Требования
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
58102
git clone https://github.com/1EVILGUN1/java-task-manager.git
59-
2. **Перейдите в папку проекта:**
103+
```
104+
2. **Перейдите в папку проекта:**
105+
```bash
60106
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+
## 🧪 Тестирование
68122

69-
Если всё сделано верно, сервер запустится, и вы сможете взаимодействовать с задачами!
123+
Проект включает тесты для:
124+
- **Контроллеров**: Проверка эндпоинтов с использованием `@WebMvcTest` и Mockito для имитации сервисов.
125+
- **Сервисов**: Проверка бизнес-логики с использованием `@SpringBootTest` и Mockito для имитации репозиториев.
126+
127+
Запуск тестов:
128+
```bash
129+
mvn test
130+
```
70131

71132
---
72133

73134
## 📋 Планы на будущее
74135

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 для автоматической сборки и тестирования.
79142

80143
---
81144

82145
## 🌟 Почему стоит попробовать?
83146

84-
- **Простота:** Минимум зависимостей, всё в одном месте.
85-
- **Практичность:** Удобное управление задачами и приоритетами.
86-
- **Обучение:** Отличный пример для изучения Java Core.
147+
- **Мощный стек технологий:** Spring Boot, Redis, H2, Docker — всё, что нужно для современного приложения.
148+
- **Полноценный REST API:** Удобный интерфейс с документацией через Swagger.
149+
- **Тестирование:** Надежный код с покрытием тестами для контроллеров и сервисов.
150+
- **Контейнеризация:** Легкий запуск приложения и Redis с помощью Docker Compose.
151+
- **Обучение:** Отличный пример для изучения Spring Framework и микросервисной архитектуры.
87152

88153
---
89154

90155
## 📬 Контакты
91156

92-
- **Email:** [yasha.golotin@mail.ru](mailto:yasha.golotin.mail.ru)
157+
- **Email:** [yasha.golotin@mail.ru](mailto:yasha.golotin@mail.ru)
93158

94159
---
95160

96161
## 🤝 Как помочь проекту
97162

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** — это не просто менеджер задач, это шаг к освоению современных технологий разработки! 🚀

docker-compose.yaml

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
services:
2+
task-manager:
3+
build:
4+
context: .
5+
dockerfile: Dockerfile
6+
image: java-task-manager:latest
7+
container_name: task-manager
8+
ports:
9+
- "8080:8080"
10+
environment:
11+
- JAVA_OPTS=-Xms512m -Xmx512m
12+
- SPRING_REDIS_HOST=redis
13+
- SPRING_REDIS_PORT=6379
14+
- SPRING_DATASOURCE_URL=jdbc:h2:mem:taskmanager;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
15+
- SPRING_DATASOURCE_DRIVER_CLASS_NAME=org.h2.Driver
16+
- SPRING_DATASOURCE_USERNAME=sa
17+
- SPRING_DATASOURCE_PASSWORD=
18+
- SPRING_JPA_HIBERNATE_DDL_AUTO=update
19+
depends_on:
20+
- redis
21+
networks:
22+
- task-manager-network
23+
24+
redis:
25+
image: redis:7.2
26+
container_name: redis
27+
ports:
28+
- "6379:6379"
29+
volumes:
30+
- redis-data:/data
31+
networks:
32+
- task-manager-network
33+
34+
networks:
35+
task-manager-network:
36+
driver: bridge
37+
38+
volumes:
39+
redis-data:

0 commit comments

Comments
 (0)