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 da58062..232ccbb 100644 --- a/todo/src/main/java/ru/kamask/pet/todo/TodoApp.java +++ b/todo/src/main/java/ru/kamask/pet/todo/TodoApp.java @@ -11,9 +11,6 @@ public class TodoApp { var service = new TaskService(new InMemoryTaskRepository()); var cli = new CliEngine(service); - // service.create("test has-id"); - // System.out.println(service.has(2)); - cli.start(); } 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 7b17ea3..f41abd5 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 @@ -44,6 +44,8 @@ public class CliEngine { void initializeCommands() { registerCommand(new CreateCommand()); + registerCommand(new ListCommand()); + registerCommand(new CompleteCommand()); } void handleHelp() { 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 new file mode 100644 index 0000000..a0ece27 --- /dev/null +++ b/todo/src/main/java/ru/kamask/pet/todo/cli/CompleteCommand.java @@ -0,0 +1,34 @@ +package ru.kamask.pet.todo.cli; + +import java.util.Optional; + +import ru.kamask.pet.todo.service.TaskService; + +public class CompleteCommand implements Command { + @Override + public String name() { + return "complete"; + } + + @Override + public String usage() { + return String.format(Command.templateUsage, name() + " ", "Отметить задачу как \"выполнена\"."); + } + + @Override + public Optional handle(String[] args, TaskService service) { + if (args.length != 1) + return Optional.of(Command.errorMessage); + + try { + int id = Integer.parseInt(args[0]); + + return Optional.of(service.complete(id) + ? "Задача ID-%d выполнена.".formatted(id) + : "Задача ID-%d не найдена.".formatted(id)); + + } catch (NumberFormatException e) { + return Optional.of("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 6a4e637..4549625 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 @@ -14,6 +14,8 @@ public class CreateCommand implements Command { public Optional handle(String[] args, TaskService service) { if (args.length > 0) { var title = String.join(" ", args); + if (title.length() > 30) + return Optional.of("Ошибка: максимальная длинна названия задачи 30 символов."); service.create(title); return Optional.of(String.format("Задача \"%s\" успешно добавлена!", title)); } 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 new file mode 100644 index 0000000..102837c --- /dev/null +++ b/todo/src/main/java/ru/kamask/pet/todo/cli/ListCommand.java @@ -0,0 +1,39 @@ +package ru.kamask.pet.todo.cli; + +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 { + @Override + public String name() { + return "list"; + } + + @Override + public Optional handle(String[] args, TaskService service) { + 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() ? "выполнено" : "не выполнено"); + } + return Optional.of(res); + } + + @Override + public String usage() { + return String.format(templateUsage, name(), "Список всех задач."); + } +} diff --git a/todo/src/main/java/ru/kamask/pet/todo/model/SimpleTask.java b/todo/src/main/java/ru/kamask/pet/todo/model/SimpleTask.java index a7206a4..143f9f0 100644 --- a/todo/src/main/java/ru/kamask/pet/todo/model/SimpleTask.java +++ b/todo/src/main/java/ru/kamask/pet/todo/model/SimpleTask.java @@ -30,6 +30,6 @@ public class SimpleTask extends Task implements DataBuilder { return new Data(id, title, done); } - record Data(int id, String title, boolean done) { + public record Data(int id, String title, boolean done) { } }