Delete internal/client/111handler.go
This commit is contained in:
parent
e0cff24ce5
commit
ed4e1347b6
@ -1,105 +0,0 @@
|
|||||||
// /futriis/internal/client/handler.go
|
|
||||||
// Пакет client реализует обработку команд клиента СУБД Futriis
|
|
||||||
// Обеспечивает взаимодействие с движком и форматированный вывод результатов
|
|
||||||
|
|
||||||
package client
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bufio"
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"futriis/internal/engine"
|
|
||||||
"futriis/pkg/utils"
|
|
||||||
)
|
|
||||||
|
|
||||||
// CommandHandler обрабатывает команды клиента
|
|
||||||
type CommandHandler struct {
|
|
||||||
engine *engine.Engine
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewCommandHandler создаёт новый обработчик команд
|
|
||||||
func NewCommandHandler(engine *engine.Engine) *CommandHandler {
|
|
||||||
return &CommandHandler{
|
|
||||||
engine: engine,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// HandleCommand обрабатывает одну команду
|
|
||||||
func (h *CommandHandler) HandleCommand(input string) (bool, error) {
|
|
||||||
// Удаляем лишние пробелы
|
|
||||||
input = strings.TrimSpace(input)
|
|
||||||
|
|
||||||
// Если ввод пустой, просто возвращаемся без вывода
|
|
||||||
if input == "" {
|
|
||||||
return false, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Разбиваем на части для проверки команды выхода
|
|
||||||
parts := strings.Fields(input)
|
|
||||||
if len(parts) == 0 {
|
|
||||||
return false, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
command := strings.ToLower(parts[0])
|
|
||||||
|
|
||||||
// Проверяем команду выхода
|
|
||||||
if command == "exit" || command == "quit" {
|
|
||||||
return true, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Выполняем команду через движок
|
|
||||||
result, err := h.engine.Execute(input)
|
|
||||||
if err != nil {
|
|
||||||
utils.PrintError("%v", err)
|
|
||||||
} else if result != "" {
|
|
||||||
// Если результат не пустой, выводим его без дополнительного форматирования
|
|
||||||
// так как движок уже возвращает цветной результат
|
|
||||||
fmt.Println(result)
|
|
||||||
}
|
|
||||||
|
|
||||||
return false, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// RunREPL запускает цикл чтения-выполнения-вывода
|
|
||||||
func (h *CommandHandler) RunREPL() error {
|
|
||||||
scanner := bufio.NewScanner(os.Stdin)
|
|
||||||
|
|
||||||
// Проверяем, было ли восстановление из AOF
|
|
||||||
if h.engine.WasAOFRecovered() {
|
|
||||||
utils.PrintPromptMessage("State successfully recovered from AOF")
|
|
||||||
}
|
|
||||||
|
|
||||||
utils.PrintPromptMessage("Welcome to Futriis DB. Type 'help' for command list.")
|
|
||||||
// Добавляем пустую строку после приветствия
|
|
||||||
fmt.Println()
|
|
||||||
|
|
||||||
for {
|
|
||||||
// Выводим приглашение
|
|
||||||
fmt.Print(utils.GetPrompt())
|
|
||||||
|
|
||||||
// Читаем команду
|
|
||||||
if !scanner.Scan() {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
input := scanner.Text()
|
|
||||||
|
|
||||||
// Обрабатываем команду
|
|
||||||
exit, err := h.HandleCommand(input)
|
|
||||||
if err != nil {
|
|
||||||
utils.PrintError("%v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if exit {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := scanner.Err(); err != nil {
|
|
||||||
return fmt.Errorf("ошибка чтения ввода: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
Loading…
x
Reference in New Issue
Block a user