From 99e60947a61e000d1e8a92248b00030a83b61372 Mon Sep 17 00:00:00 2001 From: KamaSK Date: Wed, 4 Jun 2025 13:25:39 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=D0=B0=20=D0=B8=20=D1=83=D0=BB?= =?UTF-8?q?=D1=83=D1=87=D1=88=D0=B5=D0=BD=D0=B0=20=D0=BA=D0=BE=D0=BC=D0=B0?= =?UTF-8?q?=D0=BD=D0=B4=D0=B0=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=D0=B0=20?= =?UTF-8?q?=D1=81=D0=BF=D0=B8=D1=81=D0=BA=D0=B0.=20-=20=D0=94=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81?= =?UTF-8?q?=20SearchCommand=20=D0=B2=20CliEngine=20-=20=D0=A3=D0=BB=D1=83?= =?UTF-8?q?=D1=87=D1=88=D0=B5=D0=BD=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=20Lis?= =?UTF-8?q?tCommand,=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B9=20=D0=BC=D0=B5?= =?UTF-8?q?=D1=82=D0=BE=D0=B4=20formatWithTable=20-=20=D0=A0=D0=B5=D0=B0?= =?UTF-8?q?=D0=BB=D0=B8=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=20=D0=BC=D0=B5=D1=82?= =?UTF-8?q?=D0=BE=D0=B4=20=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=D0=B0=20=D0=B2=20?= =?UTF-8?q?=D1=81=D0=B5=D1=80=D0=B2=D0=B8=D1=81=D0=B5=20=D0=B7=D0=B0=D0=B4?= =?UTF-8?q?=D0=B0=D1=87=20(TaskService)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + .../ru/kamask/pet/todo/cli/CliEngine.java | 1 + .../ru/kamask/pet/todo/cli/ListCommand.java | 32 ++++++++++++------- .../ru/kamask/pet/todo/cli/SearchCommand.java | 30 +++++++++++++++++ .../kamask/pet/todo/service/TaskService.java | 6 ++++ 5 files changed, 58 insertions(+), 12 deletions(-) create mode 100644 todo/src/main/java/ru/kamask/pet/todo/cli/SearchCommand.java diff --git a/.gitignore b/.gitignore index 65a5a36..d82b4cb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ todo/target/ .vscode/ +.lingma/ \ No newline at end of file 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 dd39b15..8852465 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 @@ -46,6 +46,7 @@ public class CliEngine { registerCommand(new CreateCommand()); registerCommand(new ListCommand()); registerCommand(new CompleteCommand()); + registerCommand(new SearchCommand()); registerCommand(new DeleteCommand()); } diff --git a/todo/src/main/java/ru/kamask/pet/todo/cli/ListCommand.java b/todo/src/main/java/ru/kamask/pet/todo/cli/ListCommand.java index 102837c..80b2fc5 100644 --- a/todo/src/main/java/ru/kamask/pet/todo/cli/ListCommand.java +++ b/todo/src/main/java/ru/kamask/pet/todo/cli/ListCommand.java @@ -1,5 +1,6 @@ package ru.kamask.pet.todo.cli; +import java.util.List; import java.util.Optional; import ru.kamask.pet.todo.model.SimpleTask; @@ -17,18 +18,8 @@ public class ListCommand implements Command { if (args.length > 0) return Optional.of(Command.errorMessage); - String template = "%-2s | %-30s | %s\n"; - String res = ""; - res += String.format(template, "ID", "Название задачи", "Статус"); - res += "-".repeat(50) + "\n"; - - if (service.list().size() == 0) - return Optional.of(res + "\nСписок задач пуст."); - - for (Task task : service.list()) { - SimpleTask.Data data = ((SimpleTask) task).data(); - res += String.format(template, data.id(), data.title(), data.done() ? "выполнено" : "не выполнено"); - } + var res = formatWithTable(service.list(), "Список задач пуст."); + return Optional.of(res); } @@ -36,4 +27,21 @@ public class ListCommand implements Command { public String usage() { return String.format(templateUsage, name(), "Список всех задач."); } + + String formatWithTable(List tasks, String msgIfEmpty){ + String template = "%-2s | %-30s | %s\n"; + String res = ""; + res += String.format(template, "ID", "Название задачи", "Статус"); + res += "-".repeat(50) + "\n"; + + if (tasks.size() == 0) + return res + "\n" + msgIfEmpty; + + for (Task task : tasks) { + SimpleTask.Data data = ((SimpleTask) task).data(); + res += String.format(template, data.id(), data.title(), data.done() ? "выполнено" : "не выполнено"); + } + + return res; + } } diff --git a/todo/src/main/java/ru/kamask/pet/todo/cli/SearchCommand.java b/todo/src/main/java/ru/kamask/pet/todo/cli/SearchCommand.java new file mode 100644 index 0000000..ae4ede6 --- /dev/null +++ b/todo/src/main/java/ru/kamask/pet/todo/cli/SearchCommand.java @@ -0,0 +1,30 @@ +package ru.kamask.pet.todo.cli; + +import java.util.Optional; + +import ru.kamask.pet.todo.service.TaskService; + +public class SearchCommand implements Command { + @Override + public String name() { + return "search"; + } + + @Override + public String usage() { + return String.format(templateUsage, name() + " <текст>", "Поиск задач по тексту (минимум 3 символа)"); + } + + @Override + public Optional handle(String[] args, TaskService service) { + if (args.length != 1) + return Optional.of(Command.errorMessage); + if (args[0].length() < 3) + return Optional.of("Длина запроса должна быть не менее 3 символов."); + + var matchTask = service.search(args[0]); + var res = new ListCommand().formatWithTable(matchTask, "Не найдено задач, соответствующих запросу."); + + return Optional.of(res); + } +} diff --git a/todo/src/main/java/ru/kamask/pet/todo/service/TaskService.java b/todo/src/main/java/ru/kamask/pet/todo/service/TaskService.java index 29fd8dd..e8e0498 100644 --- a/todo/src/main/java/ru/kamask/pet/todo/service/TaskService.java +++ b/todo/src/main/java/ru/kamask/pet/todo/service/TaskService.java @@ -42,4 +42,10 @@ public class TaskService { public boolean has(int id) { return repo.has(id); } + + public List search(String query) { + return repo.findAll().stream() + .filter(task -> ((SimpleTask) task).data().title().contains(query)) + .toList(); + } } -- 2.47.2 From 0f838ae4a070863e52fd1ef6edacb5050ef25a91 Mon Sep 17 00:00:00 2001 From: KamaSK Date: Wed, 4 Jun 2025 15:02:31 +0300 Subject: [PATCH 2/2] Release v2.1.0 --- CHANGELOG.md | 18 ++++++++++++++---- README.md | 5 +++-- todo/pom.xml | 2 +- .../java/ru/kamask/pet/todo/cli/CliEngine.java | 2 +- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 03acd03..0089a5f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,19 @@ -# Журнал изменений - Все заметные изменения проекта будут документироваться в этом файле. Формат основан на [Keep a Changelog](https://keepachangelog.com/ru/1.0.0/), -и этот проект придерживается [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +и этот проект придерживается [Semantic Versioning](https://semver.org/spec/v2.0.0.html) + +## [2.1.0] - 2025-06-01 + +### Добавлено +- Команда `search <текст>` для поиска задач по тексту (реализован класс `SearchCommand`) +- Метод `search(String query)` в `TaskService` для поддержки поиска задач +- Рефакторинг: вынесение общего функционала отображения задач в отдельный метод `formatWithTable()` в классе `ListCommand` + +### Изменено +- Обновлены внутренние зависимости между компонентами CLI (`SearchCommand`, `ListCommand`) и моделью данных (`Task`, `SimpleTask`) +- Добавлена обработка минимальной длины поискового запроса (3 символа) в `SearchCommand`# Журнал изменений + ## [2.0.0] - 2025-05-29 @@ -11,4 +21,4 @@ - Базовая функциональность для управления задачами - Команды: create, list, delete - Консольный интерфейс для взаимодействия с приложением -- In-memory хранилище задач \ No newline at end of file +- In-memory хранилище задач \ No newline at end of file diff --git a/README.md b/README.md index 54efe8b..b771189 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ java -jar ./target/todo.jar - `list` - Показать список всех задач - `complete ` - Отметить задачу как выполненную - `delete ` - Удалить задачу +- `search <текст>` - Найти задачи по тексту - `exit` - Выйти из приложения ## Структура проекта @@ -28,7 +29,7 @@ java -jar ./target/todo.jar - `cli` - Компоненты интерфейса командной строки ## Версии -Актуальная версия: 2.0 +Актуальная версия: 2.1 ## Лицензия -[MIT](LICENSE) \ No newline at end of file +[MIT](LICENSE) \ No newline at end of file diff --git a/todo/pom.xml b/todo/pom.xml index f5a8185..3058f16 100644 --- a/todo/pom.xml +++ b/todo/pom.xml @@ -6,7 +6,7 @@ ru.kamask.pet todo - 2.0-SNAPSHOT + 2.1 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 8852465..f345398 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 @@ -21,7 +21,7 @@ public class CliEngine { } public void start() throws IOException { - System.out.println("\nДобро пожаловать в Список задач 2.0!"); + System.out.println("\nДобро пожаловать в Список задач 2.1!"); System.out.println("Введите help для просмтора доступных команд или exit для выхода."); while (true) { System.out.print("\ntodo> "); -- 2.47.2