59 lines
1.1 KiB
Go
59 lines
1.1 KiB
Go
package cli
|
|
|
|
import (
|
|
"bufio"
|
|
"controle-de-estoque/internal/service"
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
// App representa a aplicação de linha de comando.
|
|
// Ele faz o papel de "controller" + "router": lê a entrada do usuário,
|
|
// decide qual ação executar e chama o service correspondente.
|
|
type App struct {
|
|
service *service.InventorySevice
|
|
reader *bufio.Scanner
|
|
}
|
|
|
|
func NewApp(s *service.InventorySevice) *App {
|
|
return &App{
|
|
service: s,
|
|
reader: bufio.NewScanner(os.Stdin),
|
|
}
|
|
}
|
|
|
|
func (a *App) Run() {
|
|
for {
|
|
ShowMenu()
|
|
|
|
if !a.reader.Scan() {
|
|
return
|
|
}
|
|
input := strings.TrimSpace(a.reader.Text())
|
|
|
|
switch strings.ToLower(input) {
|
|
case "1", "adicionar":
|
|
a.handleAdd()
|
|
case "2", "listar":
|
|
a.handleList()
|
|
case "3", "atualizar":
|
|
a.handleUpdate()
|
|
case "4", "deletar":
|
|
a.handleDelete()
|
|
case "0", "sair":
|
|
fmt.Println("Saindo...")
|
|
return
|
|
default:
|
|
fmt.Println("Opção inválida, tente novamente.")
|
|
}
|
|
}
|
|
}
|
|
|
|
// Helper para pedir e ler uma linha de texto do usuário.
|
|
func (a *App) readLine(msg string) string {
|
|
fmt.Print(msg)
|
|
a.reader.Scan()
|
|
return strings.TrimSpace(a.reader.Text())
|
|
}
|