From 09cbf440adc1380eb8e4fb8cfdc39fcca1c5725f Mon Sep 17 00:00:00 2001 From: KamaSK Date: Wed, 4 Jun 2025 16:45:37 +0300 Subject: [PATCH 01/10] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D0=BD=D0=B3=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81?= =?UTF-8?q?=D0=B0=20ListCommand?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit -Обновление версии проекта до 2.2.0-SNAPSHOT -Рефакторинг класса ListCommand для объединения строк через класс StringBuilder -Повышение читаемости и производительности метода formatWithTable --- todo/pom.xml | 2 +- .../java/ru/kamask/pet/todo/cli/ListCommand.java | 15 +++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/todo/pom.xml b/todo/pom.xml index 3058f16..d4451e7 100644 --- a/todo/pom.xml +++ b/todo/pom.xml @@ -6,7 +6,7 @@ ru.kamask.pet todo - 2.1 + 2.2.0-SNAPSHOT 24 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 80b2fc5..c7cb854 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 @@ -19,7 +19,7 @@ public class ListCommand implements Command { return Optional.of(Command.errorMessage); var res = formatWithTable(service.list(), "Список задач пуст."); - + return Optional.of(res); } @@ -28,20 +28,19 @@ public class ListCommand implements Command { return String.format(templateUsage, name(), "Список всех задач."); } - String formatWithTable(List tasks, String msgIfEmpty){ + String formatWithTable(List tasks, String msgIfEmpty) { String template = "%-2s | %-30s | %s\n"; - String res = ""; - res += String.format(template, "ID", "Название задачи", "Статус"); - res += "-".repeat(50) + "\n"; + var res = new StringBuilder(String.format(template, "ID", "Название задачи", "Статус")); + res.append("-".repeat(50) + "\n"); if (tasks.size() == 0) - return res + "\n" + msgIfEmpty; + return res.append("\n" + msgIfEmpty).toString(); for (Task task : tasks) { SimpleTask.Data data = ((SimpleTask) task).data(); - res += String.format(template, data.id(), data.title(), data.done() ? "выполнено" : "не выполнено"); + res.append(String.format(template, data.id(), data.title(), data.done() ? "выполнено" : "не выполнено")); } - return res; + return res.toString(); } } -- 2.47.2 From 8399ab0d587986c536c8da1b23b8e18498adceef Mon Sep 17 00:00:00 2001 From: KamaSK Date: Fri, 6 Jun 2025 18:13:21 +0300 Subject: [PATCH 02/10] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84?= =?UTF-8?q?=D0=B5=D0=B9=D1=81=D0=B0=20Identifiable=20=D0=B8=20=D0=B5=D0=B3?= =?UTF-8?q?=D0=BE=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=B2=20Task=20(closes=20#45)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Создан интерфейс Identifiable с методом getId() - Реализован Identifiable в классе Task - Переопределён метод getId() в Task - Сохранён существующий метод id() для обратной совместимости --- .../main/java/ru/kamask/pet/todo/model/Identifiable.java | 5 +++++ todo/src/main/java/ru/kamask/pet/todo/model/Task.java | 9 +++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 todo/src/main/java/ru/kamask/pet/todo/model/Identifiable.java diff --git a/todo/src/main/java/ru/kamask/pet/todo/model/Identifiable.java b/todo/src/main/java/ru/kamask/pet/todo/model/Identifiable.java new file mode 100644 index 0000000..0941fcc --- /dev/null +++ b/todo/src/main/java/ru/kamask/pet/todo/model/Identifiable.java @@ -0,0 +1,5 @@ +package ru.kamask.pet.todo.model; + +public interface Identifiable { + int getId(); +} diff --git a/todo/src/main/java/ru/kamask/pet/todo/model/Task.java b/todo/src/main/java/ru/kamask/pet/todo/model/Task.java index f160ca3..ccdb3a2 100644 --- a/todo/src/main/java/ru/kamask/pet/todo/model/Task.java +++ b/todo/src/main/java/ru/kamask/pet/todo/model/Task.java @@ -1,6 +1,6 @@ package ru.kamask.pet.todo.model; -public abstract class Task { +public abstract class Task implements Identifiable{ private static int nextId = 1; protected int id; @@ -11,10 +11,15 @@ public abstract class Task { this.title = title; } - public int id() { + @Override + public int getId() { return id; } + public int id() { + return getId(); + } + @Override public String toString() { return String.format("Задача: id - %d, title: \"%s\"", id, title); -- 2.47.2 From 4cd38a9afe6cfd8527fed90c357dda79ea489f95 Mon Sep 17 00:00:00 2001 From: KamaSK Date: Fri, 6 Jun 2025 19:30:39 +0300 Subject: [PATCH 03/10] =?UTF-8?q?refactor(todo):=20=D0=B2=D0=BD=D0=B5?= =?UTF-8?q?=D0=B4=D1=80=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=83=D0=BD=D0=B8=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D1=81=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B3=D0=BE=20?= =?UTF-8?q?=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5=D0=B9=D1=81=D0=B0=20?= =?UTF-8?q?Repository=20=D0=B8=20=D1=83=D0=BF=D1=80=D0=BE=D1=89=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20?= =?UTF-8?q?=D1=81=20=D0=BC=D0=BE=D0=B4=D0=B5=D0=BB=D1=8C=D1=8E=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=B4=D0=B0=D1=87=20(close=20#46)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Добавлен интерфейс Repository для базовых CRUD-операций - Обновлён TaskRepository для наследования от Repository - Рефакторинг InMemoryTaskRepository для работы с SimpleTask - Настройка ListCommand и TaskService для прямой работы с SimpleTask - Удалено лишнее приведение типов и улучшена типобезопасность --- .../ru/kamask/pet/todo/cli/ListCommand.java | 7 +++---- .../pet/todo/repo/InMemoryTaskRepository.java | 10 +++++----- .../ru/kamask/pet/todo/repo/Repository.java | 14 ++++++++++++++ .../ru/kamask/pet/todo/repo/TaskRepository.java | 17 ++--------------- .../ru/kamask/pet/todo/service/TaskService.java | 9 ++++----- 5 files changed, 28 insertions(+), 29 deletions(-) create mode 100644 todo/src/main/java/ru/kamask/pet/todo/repo/Repository.java 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 c7cb854..2e60482 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 @@ -4,7 +4,6 @@ import java.util.List; import java.util.Optional; import ru.kamask.pet.todo.model.SimpleTask; -import ru.kamask.pet.todo.model.Task; import ru.kamask.pet.todo.service.TaskService; public class ListCommand implements Command { @@ -28,7 +27,7 @@ public class ListCommand implements Command { return String.format(templateUsage, name(), "Список всех задач."); } - String formatWithTable(List tasks, String msgIfEmpty) { + String formatWithTable(List tasks, String msgIfEmpty) { String template = "%-2s | %-30s | %s\n"; var res = new StringBuilder(String.format(template, "ID", "Название задачи", "Статус")); res.append("-".repeat(50) + "\n"); @@ -36,8 +35,8 @@ public class ListCommand implements Command { if (tasks.size() == 0) return res.append("\n" + msgIfEmpty).toString(); - for (Task task : tasks) { - SimpleTask.Data data = ((SimpleTask) task).data(); + for (SimpleTask task : tasks) { + SimpleTask.Data data = task.data(); res.append(String.format(template, data.id(), data.title(), data.done() ? "выполнено" : "не выполнено")); } diff --git a/todo/src/main/java/ru/kamask/pet/todo/repo/InMemoryTaskRepository.java b/todo/src/main/java/ru/kamask/pet/todo/repo/InMemoryTaskRepository.java index 47bd259..7d3312e 100644 --- a/todo/src/main/java/ru/kamask/pet/todo/repo/InMemoryTaskRepository.java +++ b/todo/src/main/java/ru/kamask/pet/todo/repo/InMemoryTaskRepository.java @@ -6,23 +6,23 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import ru.kamask.pet.todo.model.Task; +import ru.kamask.pet.todo.model.SimpleTask; public class InMemoryTaskRepository implements TaskRepository { - private Map storage = new HashMap<>(); + private Map storage = new HashMap<>(); @Override - public void save(Task task) { + public void save(SimpleTask task) { storage.put(task.id(), task); } @Override - public Optional findById(int id) { + public Optional findById(int id) { return Optional.ofNullable(storage.get(id)); } @Override - public List findAll() { + public List findAll() { return new ArrayList<>(storage.values()); } diff --git a/todo/src/main/java/ru/kamask/pet/todo/repo/Repository.java b/todo/src/main/java/ru/kamask/pet/todo/repo/Repository.java new file mode 100644 index 0000000..dcf7b37 --- /dev/null +++ b/todo/src/main/java/ru/kamask/pet/todo/repo/Repository.java @@ -0,0 +1,14 @@ +package ru.kamask.pet.todo.repo; + +import java.util.List; +import java.util.Optional; + +import ru.kamask.pet.todo.model.Identifiable; + +public interface Repository { + void save(T obj); + Optional findById(int id); + List findAll(); + void delete(int id); + boolean has(int id); +} diff --git a/todo/src/main/java/ru/kamask/pet/todo/repo/TaskRepository.java b/todo/src/main/java/ru/kamask/pet/todo/repo/TaskRepository.java index 3ae050d..4d32d3d 100644 --- a/todo/src/main/java/ru/kamask/pet/todo/repo/TaskRepository.java +++ b/todo/src/main/java/ru/kamask/pet/todo/repo/TaskRepository.java @@ -1,18 +1,5 @@ package ru.kamask.pet.todo.repo; -import java.util.List; -import java.util.Optional; +import ru.kamask.pet.todo.model.SimpleTask; -import ru.kamask.pet.todo.model.Task; - -public interface TaskRepository { - void save(Task task); - - Optional findById(int id); - - List findAll(); - - void delete(int id); - - boolean has(int id); -} +public interface TaskRepository extends Repository {} 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 e8e0498..0e7e932 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 @@ -3,7 +3,6 @@ package ru.kamask.pet.todo.service; import java.util.List; import java.util.Optional; -import ru.kamask.pet.todo.model.Task; import ru.kamask.pet.todo.model.SimpleTask; import ru.kamask.pet.todo.repo.TaskRepository; @@ -18,7 +17,7 @@ public class TaskService { repo.save(new SimpleTask(title)); } - public Optional getById(int id) { + public Optional getById(int id) { return repo.findById(id); } @@ -31,7 +30,7 @@ public class TaskService { return false; } - public List list() { + public List list() { return repo.findAll(); } @@ -43,9 +42,9 @@ public class TaskService { return repo.has(id); } - public List search(String query) { + public List search(String query) { return repo.findAll().stream() - .filter(task -> ((SimpleTask) task).data().title().contains(query)) + .filter(task -> task.data().title().contains(query)) .toList(); } } -- 2.47.2 From 8c0cc0aa06134dacbfaaea1154e31785f9194b66 Mon Sep 17 00:00:00 2001 From: KamaSK Date: Fri, 6 Jun 2025 20:33:35 +0300 Subject: [PATCH 04/10] =?UTF-8?q?refactor(repo):=20=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B8=D0=BC=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=B8=20=D1=80=D0=B5=D1=81=D1=82=D1=80=D1=83=D0=BA?= =?UTF-8?q?=D1=82=D1=83=D1=80=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BA?= =?UTF-8?q?=D0=BB=D0=B0=D1=81=D1=81=D0=BE=D0=B2=20=D1=80=D0=B5=D0=BF=D0=BE?= =?UTF-8?q?=D0=B7=D0=B8=D1=82=D0=BE=D1=80=D0=B8=D1=8F=20(close=20#47)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Переименован InMemoryTaskRepository в InMemoryRepository - Обновлён TaskService для использования InMemoryRepository вместо TaskRepository - Удалён интерфейс TaskRepository - Обновлены импорты и ссылки на классы --- todo/src/main/java/ru/kamask/pet/todo/TodoApp.java | 5 +++-- ...TaskRepository.java => InMemoryRepository.java} | 14 +++++++------- .../ru/kamask/pet/todo/repo/TaskRepository.java | 5 ----- .../ru/kamask/pet/todo/service/TaskService.java | 6 +++--- 4 files changed, 13 insertions(+), 17 deletions(-) rename todo/src/main/java/ru/kamask/pet/todo/repo/{InMemoryTaskRepository.java => InMemoryRepository.java} (59%) delete mode 100644 todo/src/main/java/ru/kamask/pet/todo/repo/TaskRepository.java diff --git a/todo/src/main/java/ru/kamask/pet/todo/TodoApp.java b/todo/src/main/java/ru/kamask/pet/todo/TodoApp.java index 232ccbb..8bbd7c2 100644 --- a/todo/src/main/java/ru/kamask/pet/todo/TodoApp.java +++ b/todo/src/main/java/ru/kamask/pet/todo/TodoApp.java @@ -3,12 +3,13 @@ package ru.kamask.pet.todo; import java.io.IOException; import ru.kamask.pet.todo.cli.CliEngine; -import ru.kamask.pet.todo.repo.InMemoryTaskRepository; +import ru.kamask.pet.todo.model.SimpleTask; +import ru.kamask.pet.todo.repo.InMemoryRepository; import ru.kamask.pet.todo.service.TaskService; public class TodoApp { public static void main(String[] args) throws IOException { - var service = new TaskService(new InMemoryTaskRepository()); + var service = new TaskService(new InMemoryRepository()); var cli = new CliEngine(service); cli.start(); diff --git a/todo/src/main/java/ru/kamask/pet/todo/repo/InMemoryTaskRepository.java b/todo/src/main/java/ru/kamask/pet/todo/repo/InMemoryRepository.java similarity index 59% rename from todo/src/main/java/ru/kamask/pet/todo/repo/InMemoryTaskRepository.java rename to todo/src/main/java/ru/kamask/pet/todo/repo/InMemoryRepository.java index 7d3312e..fab4543 100644 --- a/todo/src/main/java/ru/kamask/pet/todo/repo/InMemoryTaskRepository.java +++ b/todo/src/main/java/ru/kamask/pet/todo/repo/InMemoryRepository.java @@ -6,23 +6,23 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import ru.kamask.pet.todo.model.SimpleTask; +import ru.kamask.pet.todo.model.Identifiable; -public class InMemoryTaskRepository implements TaskRepository { - private Map storage = new HashMap<>(); +public class InMemoryRepository implements Repository { + private Map storage = new HashMap<>(); @Override - public void save(SimpleTask task) { - storage.put(task.id(), task); + public void save(T obj) { + storage.put(obj.getId(), obj); } @Override - public Optional findById(int id) { + public Optional findById(int id) { return Optional.ofNullable(storage.get(id)); } @Override - public List findAll() { + public List findAll() { return new ArrayList<>(storage.values()); } diff --git a/todo/src/main/java/ru/kamask/pet/todo/repo/TaskRepository.java b/todo/src/main/java/ru/kamask/pet/todo/repo/TaskRepository.java deleted file mode 100644 index 4d32d3d..0000000 --- a/todo/src/main/java/ru/kamask/pet/todo/repo/TaskRepository.java +++ /dev/null @@ -1,5 +0,0 @@ -package ru.kamask.pet.todo.repo; - -import ru.kamask.pet.todo.model.SimpleTask; - -public interface TaskRepository extends Repository {} 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 0e7e932..7959efb 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 @@ -4,12 +4,12 @@ import java.util.List; import java.util.Optional; import ru.kamask.pet.todo.model.SimpleTask; -import ru.kamask.pet.todo.repo.TaskRepository; +import ru.kamask.pet.todo.repo.InMemoryRepository; public class TaskService { - private final TaskRepository repo; + private final InMemoryRepository repo; - public TaskService(TaskRepository repo) { + public TaskService(InMemoryRepository repo) { this.repo = repo; } -- 2.47.2 From 5140228f3e0fdb843a58d54fc5bdf7e09c9bbe10 Mon Sep 17 00:00:00 2001 From: KamaSK Date: Sat, 7 Jun 2025 15:21:55 +0300 Subject: [PATCH 05/10] =?UTF-8?q?feat(service):=20=D1=81=D0=BE=D0=B7=D0=B4?= =?UTF-8?q?=D0=B0=D0=BD=20=D1=83=D0=BD=D0=B8=D0=B2=D0=B5=D1=80=D1=81=D0=B0?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20EntityService=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=BE=D0=BF=D0=B5=D1=80=D0=B0=D1=86=D0=B8=D0=B9=20CRU?= =?UTF-8?q?D=20(close=20#48)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Реализован универсальный класс EntityService для стандартных операций CRUD - Определены методы для сохранения, получения и удаления сущностей - Предоставлена основа для реализации специализированных сервисов --- .../pet/todo/service/EntityService.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 todo/src/main/java/ru/kamask/pet/todo/service/EntityService.java diff --git a/todo/src/main/java/ru/kamask/pet/todo/service/EntityService.java b/todo/src/main/java/ru/kamask/pet/todo/service/EntityService.java new file mode 100644 index 0000000..9f0bc6d --- /dev/null +++ b/todo/src/main/java/ru/kamask/pet/todo/service/EntityService.java @@ -0,0 +1,35 @@ +package ru.kamask.pet.todo.service; + +import java.util.List; +import java.util.Optional; + +import ru.kamask.pet.todo.model.Identifiable; +import ru.kamask.pet.todo.repo.Repository; + +public class EntityService { + private final Repository repo; + + protected EntityService(Repository repo) { + this.repo = repo; + } + + protected void save(T obj) { + repo.save(obj); + } + + protected Optional getById(int id) { + return repo.findById(id); + } + + protected List getAll() { + return repo.findAll(); + } + + protected void remove(int id) { + repo.delete(id); + } + + protected boolean has(int id) { + return repo.has(id); + } +} -- 2.47.2 From 56038f62f7c88b38a75b9feee2aed25a6d6e30dc Mon Sep 17 00:00:00 2001 From: KamaSK Date: Sat, 7 Jun 2025 16:26:41 +0300 Subject: [PATCH 06/10] =?UTF-8?q?refactor(service):=20=D1=83=D0=BD=D0=B8?= =?UTF-8?q?=D1=84=D0=B8=D0=BA=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BE=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B0=D1=86=D0=B8=D0=B9=20=D1=81=20=D1=81=D1=83=D1=89?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D1=82=D1=8F=D0=BC=D0=B8=20=D0=B8=20=D0=BE?= =?UTF-8?q?=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D1=8B=20list=20(close=20#49)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Обновление ListCommand для использования метода getAll() вместо list() - Рефакторинг EntityService для предоставления универсальных CRUD-операций - Изменение TaskService для расширения EntityService и использования его методов --- .../ru/kamask/pet/todo/cli/ListCommand.java | 2 +- .../pet/todo/service/EntityService.java | 10 +++---- .../kamask/pet/todo/service/TaskService.java | 30 +++++-------------- 3 files changed, 13 insertions(+), 29 deletions(-) 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 2e60482..3a5de09 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 @@ -17,7 +17,7 @@ public class ListCommand implements Command { if (args.length > 0) return Optional.of(Command.errorMessage); - var res = formatWithTable(service.list(), "Список задач пуст."); + var res = formatWithTable(service.getAll(), "Список задач пуст."); return Optional.of(res); } diff --git a/todo/src/main/java/ru/kamask/pet/todo/service/EntityService.java b/todo/src/main/java/ru/kamask/pet/todo/service/EntityService.java index 9f0bc6d..720aa7f 100644 --- a/todo/src/main/java/ru/kamask/pet/todo/service/EntityService.java +++ b/todo/src/main/java/ru/kamask/pet/todo/service/EntityService.java @@ -13,23 +13,23 @@ public class EntityService { this.repo = repo; } - protected void save(T obj) { + public void save(T obj) { repo.save(obj); } - protected Optional getById(int id) { + public Optional getById(int id) { return repo.findById(id); } - protected List getAll() { + public List getAll() { return repo.findAll(); } - protected void remove(int id) { + public void remove(int id) { repo.delete(id); } - protected boolean has(int id) { + public boolean has(int id) { return repo.has(id); } } 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 7959efb..c1ab2ef 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 @@ -1,28 +1,23 @@ package ru.kamask.pet.todo.service; import java.util.List; -import java.util.Optional; import ru.kamask.pet.todo.model.SimpleTask; -import ru.kamask.pet.todo.repo.InMemoryRepository; +import ru.kamask.pet.todo.repo.Repository; -public class TaskService { - private final InMemoryRepository repo; +public class TaskService extends EntityService { - public TaskService(InMemoryRepository repo) { - this.repo = repo; + public TaskService(Repository repo) { + super(repo); } public void create(String title) { - repo.save(new SimpleTask(title)); + super.save(new SimpleTask(title)); } - public Optional getById(int id) { - return repo.findById(id); - } public boolean complete(int id) { - var taskOpt = repo.findById(id); + var taskOpt = super.getById(id); if (taskOpt.isPresent()) { taskOpt.get().markAsCompleted(); return true; @@ -30,20 +25,9 @@ public class TaskService { return false; } - public List list() { - return repo.findAll(); - } - - public void remove(int id) { - repo.delete(id); - } - - public boolean has(int id) { - return repo.has(id); - } public List search(String query) { - return repo.findAll().stream() + return super.getAll().stream() .filter(task -> task.data().title().contains(query)) .toList(); } -- 2.47.2 From e64318df279a558d3121bf16ff9ed329950af05b Mon Sep 17 00:00:00 2001 From: KamaSK Date: Sun, 8 Jun 2025 08:37:31 +0300 Subject: [PATCH 07/10] =?UTF-8?q?refactor(cli):=20=D0=9E=D0=B1=D0=BE=D0=B1?= =?UTF-8?q?=D1=89=D0=B5=D0=BD=D0=B8=D0=B5=20CLI-=D0=BA=D0=BE=D0=BC=D0=B0?= =?UTF-8?q?=D0=BD=D0=B4=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D0=BE=D0=B4=D0=B4?= =?UTF-8?q?=D0=B5=D1=80=D0=B6=D0=BA=D0=B8=20=D1=80=D0=B0=D0=B7=D0=BD=D1=8B?= =?UTF-8?q?=D1=85=20=D1=82=D0=B8=D0=BF=D0=BE=D0=B2=20=D1=81=D1=83=D1=89?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D1=82=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Обновил движок CLI и команды для использования EntityService вместо TaskService - Заменил TaskService на EntityService в реализациях команд - Модифицировал логику команд для работы с любым типом сущности, расширяющим Identifiable - Обновил сигнатуры типов и вызовы методов для соответствия новому интерфейсу --- todo/src/main/java/ru/kamask/pet/todo/cli/CliEngine.java | 7 ++++--- todo/src/main/java/ru/kamask/pet/todo/cli/Command.java | 5 +++-- .../java/ru/kamask/pet/todo/cli/CompleteCommand.java | 8 ++++++-- .../main/java/ru/kamask/pet/todo/cli/CreateCommand.java | 9 ++++++--- .../main/java/ru/kamask/pet/todo/cli/DeleteCommand.java | 7 ++++--- .../main/java/ru/kamask/pet/todo/cli/ListCommand.java | 9 ++++++--- .../main/java/ru/kamask/pet/todo/cli/SearchCommand.java | 8 ++++++-- 7 files changed, 35 insertions(+), 18 deletions(-) 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 f345398..f9fdd0f 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 @@ -7,14 +7,15 @@ import java.util.Arrays; import java.util.HashMap; import java.util.Optional; -import ru.kamask.pet.todo.service.TaskService; +import ru.kamask.pet.todo.model.Identifiable; +import ru.kamask.pet.todo.service.EntityService; public class CliEngine { private HashMap registry = new HashMap<>(); - private TaskService service; + private EntityService service; private BufferedReader reader; - public CliEngine(TaskService service) { + public CliEngine(EntityService service) { this.service = service; reader = new BufferedReader(new InputStreamReader(System.in)); initializeCommands(); diff --git a/todo/src/main/java/ru/kamask/pet/todo/cli/Command.java b/todo/src/main/java/ru/kamask/pet/todo/cli/Command.java index 52dde08..4587b73 100644 --- a/todo/src/main/java/ru/kamask/pet/todo/cli/Command.java +++ b/todo/src/main/java/ru/kamask/pet/todo/cli/Command.java @@ -2,13 +2,14 @@ package ru.kamask.pet.todo.cli; import java.util.Optional; -import ru.kamask.pet.todo.service.TaskService; +import ru.kamask.pet.todo.model.Identifiable; +import ru.kamask.pet.todo.service.EntityService; public interface Command { String templateUsage = " %-30s // %s"; String errorMessage = "Не корректно введена команда. Введите help для спарвки."; - Optional handle(String[] args, TaskService service); + Optional handle(String[] args, EntityService service); String name(); diff --git a/todo/src/main/java/ru/kamask/pet/todo/cli/CompleteCommand.java b/todo/src/main/java/ru/kamask/pet/todo/cli/CompleteCommand.java index a0ece27..8678876 100644 --- a/todo/src/main/java/ru/kamask/pet/todo/cli/CompleteCommand.java +++ b/todo/src/main/java/ru/kamask/pet/todo/cli/CompleteCommand.java @@ -2,6 +2,8 @@ package ru.kamask.pet.todo.cli; import java.util.Optional; +import ru.kamask.pet.todo.model.Identifiable; +import ru.kamask.pet.todo.service.EntityService; import ru.kamask.pet.todo.service.TaskService; public class CompleteCommand implements Command { @@ -16,14 +18,16 @@ public class CompleteCommand implements Command { } @Override - public Optional handle(String[] args, TaskService service) { + public Optional handle(String[] args, EntityService service) { if (args.length != 1) return Optional.of(Command.errorMessage); + TaskService taskService = (TaskService) service; + try { int id = Integer.parseInt(args[0]); - return Optional.of(service.complete(id) + return Optional.of(taskService.complete(id) ? "Задача ID-%d выполнена.".formatted(id) : "Задача ID-%d не найдена.".formatted(id)); diff --git a/todo/src/main/java/ru/kamask/pet/todo/cli/CreateCommand.java b/todo/src/main/java/ru/kamask/pet/todo/cli/CreateCommand.java index 4549625..6505adb 100644 --- a/todo/src/main/java/ru/kamask/pet/todo/cli/CreateCommand.java +++ b/todo/src/main/java/ru/kamask/pet/todo/cli/CreateCommand.java @@ -2,21 +2,24 @@ package ru.kamask.pet.todo.cli; import java.util.Optional; +import ru.kamask.pet.todo.model.Identifiable; +import ru.kamask.pet.todo.service.EntityService; import ru.kamask.pet.todo.service.TaskService; -public class CreateCommand implements Command { +public class CreateCommand implements Command{ @Override public String name() { return "create"; } @Override - public Optional handle(String[] args, TaskService service) { + public Optional handle(String[] args, EntityService service) { if (args.length > 0) { var title = String.join(" ", args); if (title.length() > 30) return Optional.of("Ошибка: максимальная длинна названия задачи 30 символов."); - service.create(title); + TaskService taskService = (TaskService) service; + taskService.create(title); return Optional.of(String.format("Задача \"%s\" успешно добавлена!", title)); } return Optional.of(Command.errorMessage); diff --git a/todo/src/main/java/ru/kamask/pet/todo/cli/DeleteCommand.java b/todo/src/main/java/ru/kamask/pet/todo/cli/DeleteCommand.java index b037776..50968cf 100644 --- a/todo/src/main/java/ru/kamask/pet/todo/cli/DeleteCommand.java +++ b/todo/src/main/java/ru/kamask/pet/todo/cli/DeleteCommand.java @@ -2,9 +2,10 @@ package ru.kamask.pet.todo.cli; import java.util.Optional; -import ru.kamask.pet.todo.service.TaskService; +import ru.kamask.pet.todo.model.Identifiable; +import ru.kamask.pet.todo.service.EntityService; -public class DeleteCommand implements Command { +public class DeleteCommand implements Command{ @Override public String name() { return "delete"; @@ -16,7 +17,7 @@ public class DeleteCommand implements Command { } @Override - public Optional handle(String[] args, TaskService service) { + public Optional handle(String[] args, EntityService service) { if (args.length != 1) return Optional.of(Command.errorMessage); 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 3a5de09..2a0b79d 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 @@ -3,7 +3,9 @@ package ru.kamask.pet.todo.cli; import java.util.List; import java.util.Optional; +import ru.kamask.pet.todo.model.Identifiable; import ru.kamask.pet.todo.model.SimpleTask; +import ru.kamask.pet.todo.service.EntityService; import ru.kamask.pet.todo.service.TaskService; public class ListCommand implements Command { @@ -13,11 +15,12 @@ public class ListCommand implements Command { } @Override - public Optional handle(String[] args, TaskService service) { + public Optional handle(String[] args, EntityService service) { if (args.length > 0) return Optional.of(Command.errorMessage); - - var res = formatWithTable(service.getAll(), "Список задач пуст."); + TaskService taskService = (TaskService) service; + List allTasks = taskService.getAll(); + var res = formatWithTable(allTasks, "Список задач пуст."); return Optional.of(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 index ae4ede6..42cf7bf 100644 --- a/todo/src/main/java/ru/kamask/pet/todo/cli/SearchCommand.java +++ b/todo/src/main/java/ru/kamask/pet/todo/cli/SearchCommand.java @@ -2,6 +2,8 @@ package ru.kamask.pet.todo.cli; import java.util.Optional; +import ru.kamask.pet.todo.model.Identifiable; +import ru.kamask.pet.todo.service.EntityService; import ru.kamask.pet.todo.service.TaskService; public class SearchCommand implements Command { @@ -16,13 +18,15 @@ public class SearchCommand implements Command { } @Override - public Optional handle(String[] args, TaskService service) { + public Optional handle(String[] args, EntityService 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]); + TaskService taskService = (TaskService) service; + + var matchTask = taskService.search(args[0]); var res = new ListCommand().formatWithTable(matchTask, "Не найдено задач, соответствующих запросу."); return Optional.of(res); -- 2.47.2 From a7eaa693bd02764c73cc85455ccafaf4ee4716f6 Mon Sep 17 00:00:00 2001 From: KamaSK Date: Sun, 8 Jun 2025 10:45:44 +0300 Subject: [PATCH 08/10] =?UTF-8?q?refactor(cli):=20=D0=92=D1=8B=D0=BD=D0=B5?= =?UTF-8?q?=D1=81=20=D0=BB=D0=BE=D0=B3=D0=B8=D0=BA=D1=83=20=D1=84=D0=BE?= =?UTF-8?q?=D1=80=D0=BC=D0=B0=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D1=82=D0=B0=D0=B1=D0=BB=D0=B8=D1=86=20=D0=B2=20?= =?UTF-8?q?utility-=D0=BA=D0=BB=D0=B0=D1=81=D1=81=20(close=20#52)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Перенес метод formatWithTable из ListCommand в новый класс Formatter - Обновил ListCommand и SearchCommand, чтобы они использовали Formatter.asTable - Изменение улучшает переиспользование кода и разделение ответственности --- .../ru/kamask/pet/todo/cli/ListCommand.java | 26 +++--------------- .../ru/kamask/pet/todo/cli/SearchCommand.java | 4 +-- .../ru/kamask/pet/todo/util/Formatter.java | 27 +++++++++++++++++++ 3 files changed, 33 insertions(+), 24 deletions(-) create mode 100644 todo/src/main/java/ru/kamask/pet/todo/util/Formatter.java 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 2a0b79d..059892a 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,12 +1,11 @@ package ru.kamask.pet.todo.cli; -import java.util.List; import java.util.Optional; import ru.kamask.pet.todo.model.Identifiable; -import ru.kamask.pet.todo.model.SimpleTask; import ru.kamask.pet.todo.service.EntityService; import ru.kamask.pet.todo.service.TaskService; +import ru.kamask.pet.todo.util.Formatter; public class ListCommand implements Command { @Override @@ -18,31 +17,14 @@ public class ListCommand implements Command { public Optional handle(String[] args, EntityService service) { if (args.length > 0) return Optional.of(Command.errorMessage); - TaskService taskService = (TaskService) service; - List allTasks = taskService.getAll(); - var res = formatWithTable(allTasks, "Список задач пуст."); - return Optional.of(res); + TaskService taskService = (TaskService) service; + + return Optional.of(Formatter.asTable(taskService.getAll())); } @Override public String usage() { return String.format(templateUsage, name(), "Список всех задач."); } - - String formatWithTable(List tasks, String msgIfEmpty) { - String template = "%-2s | %-30s | %s\n"; - var res = new StringBuilder(String.format(template, "ID", "Название задачи", "Статус")); - res.append("-".repeat(50) + "\n"); - - if (tasks.size() == 0) - return res.append("\n" + msgIfEmpty).toString(); - - for (SimpleTask task : tasks) { - SimpleTask.Data data = task.data(); - res.append(String.format(template, data.id(), data.title(), data.done() ? "выполнено" : "не выполнено")); - } - - return res.toString(); - } } 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 index 42cf7bf..a0880c1 100644 --- a/todo/src/main/java/ru/kamask/pet/todo/cli/SearchCommand.java +++ b/todo/src/main/java/ru/kamask/pet/todo/cli/SearchCommand.java @@ -5,6 +5,7 @@ import java.util.Optional; import ru.kamask.pet.todo.model.Identifiable; import ru.kamask.pet.todo.service.EntityService; import ru.kamask.pet.todo.service.TaskService; +import ru.kamask.pet.todo.util.Formatter; public class SearchCommand implements Command { @Override @@ -27,8 +28,7 @@ public class SearchCommand implements Command { TaskService taskService = (TaskService) service; var matchTask = taskService.search(args[0]); - var res = new ListCommand().formatWithTable(matchTask, "Не найдено задач, соответствующих запросу."); - return Optional.of(res); + return Optional.of(Formatter.asTable(matchTask, "Не найдено задач, соответствующих запросу.")); } } diff --git a/todo/src/main/java/ru/kamask/pet/todo/util/Formatter.java b/todo/src/main/java/ru/kamask/pet/todo/util/Formatter.java new file mode 100644 index 0000000..fd60064 --- /dev/null +++ b/todo/src/main/java/ru/kamask/pet/todo/util/Formatter.java @@ -0,0 +1,27 @@ +package ru.kamask.pet.todo.util; + +import java.util.List; + +import ru.kamask.pet.todo.model.SimpleTask; + +public class Formatter { + public static String asTable(List tasks){ + return asTable(tasks, "Список задач пуст."); + } + + public static String asTable(List tasks, String msgIfEmpty){ + String template = "%-2s | %-30s | %s\n"; + var res = new StringBuilder(String.format(template, "ID", "Название задачи", "Статус")); + res.append("-".repeat(50) + "\n"); + + if (tasks.size() == 0) + return res.append("\n" + msgIfEmpty).toString(); + + for (SimpleTask task : tasks) { + SimpleTask.Data data = task.data(); + res.append(String.format(template, data.id(), data.title(), data.done() ? "выполнено" : "не выполнено")); + } + + return res.toString(); + } +} -- 2.47.2 From 409b520e6932ba2b934da1007e9ac45410f933df Mon Sep 17 00:00:00 2001 From: KamaSK Date: Sun, 8 Jun 2025 11:43:32 +0300 Subject: [PATCH 09/10] feat(todo): release v2.2.0 (close #53) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Обновил README с описанием новых возможностей и примерами использования - Добавил детальные заметки о релизе в CHANGELOG - Установил версию 2.2.0 --- CHANGELOG.md | 31 ++++++++++++++++--- README.md | 87 +++++++++++++++++++++++++++++++++++++++++++--------- todo/pom.xml | 2 +- 3 files changed, 100 insertions(+), 20 deletions(-) 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..526d37a 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` - Показать список всех задач -- `complete ` - Отметить задачу как выполненную -- `delete ` - Удалить задачу -- `search <текст>` - Найти задачи по тексту -- `exit` - Выйти из приложения -## Структура проекта -- `model` - Модели данных (Task, SimpleTask) -- `repo` - Репозитории для хранения задач -- `service` - Бизнес-логика -- `cli` - Компоненты интерфейса командной строки +## Использование + +### Доступные команды +- create <название_задачи> - Создать новую задачу +- list - Показать список всех задач в табличном виде +- complete - Отметить задачу как выполненную +- delete - Удалить задачу по ID +- search <текст> - Найти задачи по тексту (минимум 3 символа) +- help - Показать список всех команд +- exit - Выйти из приложения + + +## Пример использования + +```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 -- 2.47.2 From c7214b04b472516b6a5e95c734373950bf9b5a16 Mon Sep 17 00:00:00 2001 From: KamaSK Date: Sun, 8 Jun 2025 11:54:27 +0300 Subject: [PATCH 10/10] fix release v2.2.0 prepare --- README.md | 14 +++++++------- .../java/ru/kamask/pet/todo/cli/CliEngine.java | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 526d37a..2e289d8 100644 --- a/README.md +++ b/README.md @@ -31,13 +31,13 @@ java -jar ./target/todo.jar ## Использование ### Доступные команды -- create <название_задачи> - Создать новую задачу -- list - Показать список всех задач в табличном виде -- complete - Отметить задачу как выполненную -- delete - Удалить задачу по ID -- search <текст> - Найти задачи по тексту (минимум 3 символа) -- help - Показать список всех команд -- exit - Выйти из приложения +- `create <название_задачи>` - Создать новую задачу +- `list` - Показать список всех задач в табличном виде +- `complete ` - Отметить задачу как выполненную +- `delete ` - Удалить задачу по ID +- `search <текст>` - Найти задачи по тексту (минимум 3 символа) +- `help` - Показать список всех команд +- `exit` - Выйти из приложения ## Пример использования 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> "); -- 2.47.2