67 lines
1.5 KiB
Go
67 lines
1.5 KiB
Go
// /futriis/internal/cli/handler.go
|
|
// Пакет cli реализует обработчик команд для интерактивного режима
|
|
|
|
package cli
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"futriis/internal/engine"
|
|
"futriis/pkg/utils"
|
|
)
|
|
|
|
// Handler представляет обработчик команд CLI
|
|
type Handler struct {
|
|
prompt *Prompt
|
|
engine *engine.Engine
|
|
}
|
|
|
|
// NewHandler создаёт новый обработчик команд
|
|
func NewHandler() *Handler {
|
|
return &Handler{
|
|
prompt: NewPrompt(),
|
|
engine: engine.NewEngine(),
|
|
}
|
|
}
|
|
|
|
// Engine возвращает движок базы данных
|
|
func (h *Handler) Engine() *engine.Engine {
|
|
return h.engine
|
|
}
|
|
|
|
// Run запускает основной цикл обработки команд
|
|
func (h *Handler) Run() error {
|
|
utils.PrintBanner()
|
|
utils.PrintInfo("Добро пожаловать в Futriis DB. Введите 'help' для списка команд.\n")
|
|
|
|
for {
|
|
// Читаем команду
|
|
input, err := h.prompt.ReadLine()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// Пропускаем пустые строки
|
|
if strings.TrimSpace(input) == "" {
|
|
continue
|
|
}
|
|
|
|
// Обрабатываем команду
|
|
result, err := h.engine.Execute(input)
|
|
if err != nil {
|
|
utils.PrintError("Ошибка: %v", err)
|
|
continue
|
|
}
|
|
|
|
// Выводим результат
|
|
if result != "" {
|
|
if result == "exit" {
|
|
utils.PrintInfo("До свидания!")
|
|
return nil
|
|
}
|
|
fmt.Println(result)
|
|
}
|
|
}
|
|
}
|