From 99e60947a61e000d1e8a92248b00030a83b61372 Mon Sep 17 00:00:00 2001 From: KamaSK Date: Wed, 4 Jun 2025 13:25:39 +0300 Subject: [PATCH] =?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