diff --git a/CHANGELOG.md b/CHANGELOG.md index 0089a5f..729f773 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,32 @@ -Все заметные изменения проекта будут документироваться в этом файле. +# Журнал изменений +Все заметные изменения проекта будут документироваться в этом файле. Формат основан на [Keep a Changelog](https://keepachangelog.com/ru/1.0.0/), и этот проект придерживается [Semantic Versioning](https://semver.org/spec/v2.0.0.html) +## [2.2.0] - 2025-06-08 + +### Добавлено +- Универсальный интерфейс `Identifiable` для всех сущностей с ID +- Универсальный класс `EntityService` для стандартных CRUD-операций +- Универсальный интерфейс `Repository` для базовых операций с данными +- Утилитарный класс `Formatter` с методом `asTable()` для форматирования таблиц + +### Изменено +- **[BREAKING]** Обобщение CLI-команд для поддержки разных типов сущностей через `EntityService` +- Рефакторинг `TaskService` для расширения `EntityService` вместо собственной реализации +- Переименование `InMemoryTaskRepository` → `InMemoryRepository` с поддержкой generics +- Унификация работы с моделью `Task` через интерфейс `Identifiable` +- Вынесение логики форматирования таблиц из `ListCommand` в отдельный utility-класс +- Обновление `ListCommand` и `SearchCommand` для использования `Formatter.asTable()` +- Замена метода `list()` на `getAll()` в сервисном слое + +### Технические улучшения +- Улучшена типобезопасность через использование generics +- Повышена переиспользуемость кода за счёт вынесения общей логики +- Упрощена архитектура через унификацию интерфейсов +- Удалено дублирование кода форматирования между командами + ## [2.1.0] - 2025-06-01 ### Добавлено @@ -12,13 +36,12 @@ ### Изменено - Обновлены внутренние зависимости между компонентами CLI (`SearchCommand`, `ListCommand`) и моделью данных (`Task`, `SimpleTask`) -- Добавлена обработка минимальной длины поискового запроса (3 символа) в `SearchCommand`# Журнал изменений - +- Добавлена обработка минимальной длины поискового запроса (3 символа) в `SearchCommand` ## [2.0.0] - 2025-05-29 ### Добавлено - Базовая функциональность для управления задачами -- Команды: create, list, delete +- Команды: create, list, delete, complete - Консольный интерфейс для взаимодействия с приложением - In-memory хранилище задач \ No newline at end of file diff --git a/README.md b/README.md index b771189..2e289d8 100644 --- a/README.md +++ b/README.md @@ -1,35 +1,92 @@ # TodoApp ## Описание -TodoApp - это консольное приложение для управления списком задач, разработанное на Java в качестве учебного проекта. Приложение позволяет создавать, просматривать, отмечать как выполненные и удалять задачи через интерфейс командной строки. + +TodoApp - это консольное приложение для управления списком задач, разработанное на Java в качестве учебного проекта. Приложение построено на универсальной архитектуре с использованием generics, что позволяет легко расширять функционал для работы с различными типами сущностей. + + +### Особенности +- Консольный интерфейс с интуитивными командами +- Универсальная архитектура на базе `EntityService` и `Repository` +- Поддержка поиска задач по тексту +- Красивое табличное отображение данных +- Типобезопасность через использование generics + ## Требования + - Java 24 или выше - Maven 3.8.x или выше + ## Установка и запуск + ```bash cd ./todo mvn clean package java -jar ./target/todo.jar ``` + +## Использование + ### Доступные команды - `create <название_задачи>` - Создать новую задачу -- `list` - Показать список всех задач +- `list` - Показать список всех задач в табличном виде - `complete ` - Отметить задачу как выполненную -- `delete ` - Удалить задачу -- `search <текст>` - Найти задачи по тексту +- `delete ` - Удалить задачу по ID +- `search <текст>` - Найти задачи по тексту (минимум 3 символа) +- `help` - Показать список всех команд - `exit` - Выйти из приложения -## Структура проекта -- `model` - Модели данных (Task, SimpleTask) -- `repo` - Репозитории для хранения задач -- `service` - Бизнес-логика -- `cli` - Компоненты интерфейса командной строки + +## Пример использования + +```shell +todo> create Изучить Java generics +Задача "Изучить Java generics" успешно добавлена! + +todo> create Написать документацию +Задача "Написать документацию" успешно добавлена! + +todo> list + +ID │ Название задачи │ Статус +-------------------------------------------------- +1 │ Изучить Java generics │ В процессе +2 │ Написать документацию │ В процессе + + +todo> complete 1 + +Задача ID-1 выполнена. + +todo> search Java + +ID │ Название задачи │ Статус +-------------------------------------------------- +1 │ Изучить Java generics │ Выполнена + +``` ## Версии -Актуальная версия: 2.1 + +Актуальная версия: 2.2.0 + +### История изменений +- 2.2.0 - Универсальная архитектура с generics, утилиты форматирования +- 2.1.0 - Добавлена команда поиска, улучшено отображение +- 2.0.0 - Базовый функционал управления задачами + +Подробная история изменений доступна в CHANGELOG.md + +### Разработка +Проект использует современные подходы Java-разработки: +- Generic programming для типобезопасности +- Разделение ответственности через слоистую архитектуру +- Command pattern для CLI-команд +- Repository pattern для работы с данными ## Лицензия -[MIT](LICENSE) \ No newline at end of file + +MIT \ No newline at end of file diff --git a/todo/pom.xml b/todo/pom.xml index d4451e7..b17d35f 100644 --- a/todo/pom.xml +++ b/todo/pom.xml @@ -6,7 +6,7 @@ ru.kamask.pet todo - 2.2.0-SNAPSHOT + 2.2.0 24 diff --git a/todo/src/main/java/ru/kamask/pet/todo/cli/CliEngine.java b/todo/src/main/java/ru/kamask/pet/todo/cli/CliEngine.java index f9fdd0f..f11450b 100644 --- a/todo/src/main/java/ru/kamask/pet/todo/cli/CliEngine.java +++ b/todo/src/main/java/ru/kamask/pet/todo/cli/CliEngine.java @@ -22,7 +22,7 @@ public class CliEngine { } public void start() throws IOException { - System.out.println("\nДобро пожаловать в Список задач 2.1!"); + System.out.println("\nДобро пожаловать в Список задач 2.2!"); System.out.println("Введите help для просмтора доступных команд или exit для выхода."); while (true) { System.out.print("\ntodo> ");