dev #36

Manually merged
KamaSK merged 20 commits from dev into main 2025-05-29 22:23:05 +03:00
4 changed files with 120 additions and 16 deletions
Showing only changes of commit dd1ec57cd3 - Show all commits

View File

@ -1,26 +1,16 @@
package ru.kamask.pet.todo; package ru.kamask.pet.todo;
import ru.kamask.pet.todo.model.SimpleTask; import java.io.IOException;
import ru.kamask.pet.todo.cli.CliEngine;
import ru.kamask.pet.todo.repo.InMemoryTaskRepository; import ru.kamask.pet.todo.repo.InMemoryTaskRepository;
import ru.kamask.pet.todo.service.TaskService; import ru.kamask.pet.todo.service.TaskService;
public class TodoApp { public class TodoApp {
public static void main(String[] args) throws IOException {
public static void main(String[] args) {
var service = new TaskService(new InMemoryTaskRepository()); var service = new TaskService(new InMemoryTaskRepository());
var cli = new CliEngine(service);
service.create("Задача номер один"); cli.start();
service.create("Задача номер два");
service.create("Задача номер три");
service.create("Задача номер четыре");
System.out.println(service.list());
service.complete(2);
service.getById(2).ifPresent(task -> System.out.println(((SimpleTask) task).data()));
service.remove(3);
System.out.println(service.list());
} }
} }

View File

@ -0,0 +1,71 @@
package ru.kamask.pet.todo.cli;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Optional;
import ru.kamask.pet.todo.service.TaskService;
public class CliEngine {
private HashMap<String, Command> registry = new HashMap<>();
private TaskService service;
private BufferedReader reader;
public CliEngine(TaskService service) {
this.service = service;
reader = new BufferedReader(new InputStreamReader(System.in));
initializeCommands();
}
public void start() throws IOException {
System.out.println("\обро пожаловать в Список задач 2.0!");
System.out.println("Введите help для просмтора доступных команд или exit для выхода.");
while (true) {
System.out.print("\ntodo> ");
var input = reader.readLine().trim();
System.out.println();
switch (input) {
case "help" -> handleHelp();
case "exit" -> System.exit(0);
default -> handleCommand(input).ifPresentOrElse(System.out::println, () -> {
System.out.println("Не известная команда. Повторите ввод.\n");
handleHelp();
});
}
}
}
void registerCommand(Command command) {
registry.put(command.name(), command);
}
void initializeCommands() {
registerCommand(new CreateCommand());
}
void handleHelp() {
var template = " %-30s // %s";
System.out.println("Доступные команды:\n");
registry.values().stream()
.map(handler -> String.format(template, handler.example(), handler.description()))
.forEach(System.out::println);
System.out.println();
System.out.printf(template, "help", "Вот этот список команд\n");
System.out.printf(template, "exit", "Выход, но лучше не надо)\n");
}
Optional<String> handleCommand(String input) {
var parts = input.split("\\s+");
var command = parts[0];
var args = Arrays.copyOfRange(parts, 1, parts.length);
var handlerOpt = Optional.ofNullable(registry.get(command));
if (handlerOpt.isPresent())
return handlerOpt.get().handle(args, service);
return Optional.empty();
}
}

View File

@ -0,0 +1,15 @@
package ru.kamask.pet.todo.cli;
import java.util.Optional;
import ru.kamask.pet.todo.service.TaskService;
public interface Command {
Optional<String> handle(String[] args, TaskService service);
String name();
String example();
String description();
}

View File

@ -0,0 +1,28 @@
package ru.kamask.pet.todo.cli;
import java.util.Optional;
import ru.kamask.pet.todo.service.TaskService;
public class CreateCommand implements Command {
@Override
public String name() {
return "create";
}
@Override
public Optional<String> handle(String[] args, TaskService service) {
// TODO create new todo
return Optional.of("Добавление новой задачи");
}
@Override
public String example() {
return name() + " <title>";
}
@Override
public String description() {
return "Добавление новой задачи";
}
}