|
| 1 | +# README.md для папки `controller` |
| 2 | + |
| 3 | +## Описание |
| 4 | + |
| 5 | +Папка `controller` содержит REST-контроллеры приложения `service.task.manager`, разработанного на Spring Boot. Контроллеры обрабатывают HTTP-запросы для управления задачами, эпиками, подзадачами и историей доступа. Все эндпоинты задокументированы с использованием аннотаций OpenAPI (Swagger), что упрощает интеграцию и тестирование API. Логирование реализовано через SLF4J, а валидация данных — через Jakarta Validation. |
| 6 | + |
| 7 | +## Структура папки |
| 8 | + |
| 9 | +Папка включает следующие контроллеры: |
| 10 | + |
| 11 | +### 1. `EpicController.java` |
| 12 | +**Описание**: Управляет эпиками — крупными задачами, содержащими подзадачи. |
| 13 | +**Эндпоинты**: |
| 14 | +- `POST /epic` — Создание нового эпика. |
| 15 | +- `PUT /epic` — Обновление существующего эпика. |
| 16 | +- `GET /epic/{id}` — Получение эпика по ID (включая подзадачи). |
| 17 | +- `GET /epic` — Получение списка всех эпиков. |
| 18 | +- `DELETE /epic/{id}` — Удаление эпика по ID. |
| 19 | +- `GET /epic/prioritized` — Получение эпиков, отсортированных по приоритету (`IN_PROGRESS`, `NEW`, `DONE`) и времени завершения. |
| 20 | + |
| 21 | +### 2. `HistoryController.java` |
| 22 | +**Описание**: Предоставляет доступ к истории вызовов метода `findById` для задач, эпиков и подзадач. |
| 23 | +**Эндпоинты**: |
| 24 | +- `GET /history` — Получение последних 10 записей истории доступа. |
| 25 | + |
| 26 | +### 3. `SubtaskController.java` |
| 27 | +**Описание**: Управляет подзадачами, связанными с эпиками. |
| 28 | +**Эндпоинты**: |
| 29 | +- `POST /subtask` — Создание новой подзадачи. |
| 30 | +- `PUT /subtask` — Обновление существующей подзадачи. |
| 31 | +- `GET /subtask/{id}` — Получение подзадачи по ID. |
| 32 | +- `GET /subtask` — Получение списка всех подзадач. |
| 33 | +- `DELETE /subtask/{id}` — Удаление подзадачи по ID. |
| 34 | +- `GET /subtask/prioritized` — Получение подзадач, отсортированных по приоритету (`IN_PROGRESS`, `NEW`, `DONE`) и времени завершения. |
| 35 | + |
| 36 | +### 4. `TaskController.java` |
| 37 | +**Описание**: Управляет задачами — основными единицами работы в системе. |
| 38 | +**Эндпоинты**: |
| 39 | +- `POST /task` — Создание новой задачи. |
| 40 | +- `PUT /task` — Обновление существующей задачи. |
| 41 | +- `GET /task/{id}` — Получение задачи по ID. |
| 42 | +- `GET /task` — Получение списка всех задач. |
| 43 | +- `DELETE /task/{id}` — Удаление задачи по ID. |
| 44 | +- `GET /task/prioritized` — Получение задач, отсортированных по приоритету (`IN_PROGRESS`, `NEW`, `DONE`) и времени завершения. |
| 45 | + |
| 46 | +## Основные особенности |
| 47 | + |
| 48 | +- **Документация API**: Эндпоинты аннотированы с помощью `@Operation`, `@ApiResponses`, `@Tag` для генерации спецификации OpenAPI. Документация доступна через Swagger UI по пути `/swagger-ui.html`. |
| 49 | +- **Логирование**: Используется SLF4J (`@Slf4j`) для записи операций (создание, обновление, удаление, получение) в логи. |
| 50 | +- **Валидация данных**: Входящие запросы проверяются с помощью аннотаций `@Valid`, `@NotNull`, `@Positive`. |
| 51 | +- **CORS**: Поддержка кросс-доменных запросов через `@CrossOrigin`. |
| 52 | +- **Коды HTTP-ответов**: |
| 53 | + - `201 Created` — Успешное создание ресурса. |
| 54 | + - `200 OK` — Успешное получение или обновление ресурса. |
| 55 | + - `204 No Content` — Успешное удаление ресурса. |
| 56 | + - `404 Not Found` — Ресурс не найден. |
| 57 | + - `409 Conflict` — Конфликт (например, дублирование имени). |
| 58 | + - `500 Internal Server Error` — Внутренняя ошибка (например, проблемы с Redis в `HistoryController`). |
| 59 | +- **Сортировка по приоритету**: Эндпоинты `/prioritized` возвращают списки, отсортированные по статусу (`IN_PROGRESS` → `NEW` → `DONE`) и времени завершения (от раннего к позднему). |
| 60 | + |
| 61 | +## Зависимости |
| 62 | + |
| 63 | +Контроллеры используют сервисы, инжектируемые через конструктор (`@RequiredArgsConstructor`): |
| 64 | +- `EpicService` — для работы с эпиками. |
| 65 | +- `HistoryService` — для работы с историей доступа (зависит от Redis). |
| 66 | +- `SubtaskService` — для работы с подзадачами. |
| 67 | +- `TaskService` — для работы с задачами. |
| 68 | + |
| 69 | +## Документация API |
| 70 | + |
| 71 | +API документируется с использованием Springdoc OpenAPI. Доступ к документации: |
| 72 | +- **Swagger UI**: `http://localhost:8080/swagger-ui.html` |
| 73 | +- **OpenAPI JSON**: `http://localhost:8080/v3/api-docs` |
| 74 | + |
| 75 | +Конфигурация Springdoc: |
| 76 | +- Название API: **Task Manager API** |
| 77 | +- Версия: **1.0.0** |
| 78 | +- Сортировка: Теги и операции сортируются по алфавиту (`tags-sorter: alpha`, `operations-sorter: alpha`). |
| 79 | + |
| 80 | +## Пример использования |
| 81 | + |
| 82 | +Контроллеры предназначены для взаимодействия с клиентскими приложениями через REST API. Для тестирования используйте Swagger UI или инструменты вроде `curl`. |
| 83 | + |
| 84 | +**Пример создания эпика**: |
| 85 | +```bash |
| 86 | +curl -X POST http://localhost:8080/epic \ |
| 87 | +-H "Content-Type: application/json" \ |
| 88 | +-d '{"name": "Новый эпик", "description": "Описание эпика"}' |
| 89 | +``` |
| 90 | + |
| 91 | +**Пример получения истории**: |
| 92 | +```bash |
| 93 | +curl -X GET http://localhost:8080/history |
| 94 | +``` |
| 95 | + |
| 96 | +## Примечания |
| 97 | + |
| 98 | +- **Redis**: Для работы `HistoryController` требуется подключение к Redis, так как история хранится в кэше. |
| 99 | +- **DTO**: Контроллеры используют объекты передачи данных (DTO) для строгой типизации и валидации. |
| 100 | +- **RESTful-дизайн**: Эндпоинты следуют принципам REST, обеспечивая удобное взаимодействие. |
| 101 | +- **Swagger UI**: Документация API доступна по пути `/swagger-ui.html` после запуска приложения. |
| 102 | + |
| 103 | +## Дополнительно |
| 104 | + |
| 105 | +Для подробной информации о структуре DTO или сервисах см. папки `dto` и `service`. По вопросам настройки или расширения API обращайтесь к документации проекта или разработчикам. |
0 commit comments