From e57de50bc287a32f56284e6d3986ebf012d08f0a Mon Sep 17 00:00:00 2001 From: jimdmm Date: Wed, 15 Jul 2026 01:00:03 -0300 Subject: [PATCH] feat: adicionando README --- README.md | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..d4d8404 --- /dev/null +++ b/README.md @@ -0,0 +1,82 @@ +# Controle de Estoque CLI + +Aplicação de linha de comando (CLI) em Go para gerenciar um estoque de produtos. +Projeto de estudo focado em organização de código em camadas (MVC) e no uso de +estruturas de dados nativas do Go. + +## Funcionalidades + +- **Adicionar** produtos ao estoque (nome, categoria, preço e quantidade) +- **Listar** todos os produtos cadastrados +- **Atualizar** um campo específico de um produto pelo ID +- **Deletar** um produto pelo ID + +## Como executar + +Requer [Go](https://go.dev/) 1.26 ou superior instalado. + +```bash +go run . +``` + +Para compilar um binário: + +```bash +go build -o controle-de-estoque +./controle-de-estoque +``` + +## Uso + +Ao iniciar, o programa exibe um menu. Escolha uma opção pelo número ou pelo nome: + +``` +1 / adicionar - Adiciona o produto no estoque +2 / listar - Lista todos os produtos do estoque +3 / atualizar - Atualiza um produto do estoque +4 / deletar - Deleta um produto do estoque +0 / sair - Sair do programa +``` + +Ao **atualizar**, informe o ID do produto e o campo desejado +(`nome`, `categoria`, `preco` ou `quantidade`), seguido do novo valor. + +## Estrutura do projeto + +O código é organizado em camadas, separando responsabilidades: + +``` +. +├── main.go # Ponto de entrada: monta as dependências e inicia a CLI +├── controller/ +│ └── controller.go # Orquestra o fluxo entre a entrada do usuário e o modelo +├── view/ +│ └── view.go # Entrada e saída no terminal (menus, leitura, exibição) +└── model/ + └── inventory.go # Regras de negócio e armazenamento dos produtos (map em memória) +``` + +- **model** — define `Product` e `Inventory`, guardando os produtos em um + `map[ProductID]Product` +- **view** — responsável por toda interação com o terminal. +- **controller** — recebe a opção do usuário e chama as operações do modelo. + +> Os dados são mantidos apenas em memória: ao encerrar o programa, o estoque é perdido. + +## Conceitos aprendidos + +- **Arquitetura em camadas (MVC)** — separação de responsabilidades entre + `model`, `view` e `controller`, mantendo cada parte independente. +- **Structs e métodos** — modelagem de dados com `Product`/`Inventory` e métodos + (`func (e *Inventory) ...`). +- **Maps** — armazenamento em `map[ProductID]Product` para busca, atualização e + remoção, o padrão *comma-ok* (`v, ok := m[k]`) e a função embutida + `delete(m, chave)`. +- **Tipos nomeados** — criação de `type ProductID int` para dar semântica aos + identificadores. +- **Leitura de entrada** — uso de `bufio.Reader` +- **Tratamento de strings** — `strings.TrimSpace` para limpar os espaços e quebras de linhas da entrada e + `strconv` (`Atoi`, `ParseFloat`) para converter texto em tipos numéricos. +- **Tratamento de erros** — múltiplos retornos `(valor, error)` e verificação com + `if err != nil`. +- **Formatação de saída** — `fmt.Printf` com verbos como `%d`, `%s` e `%.2f`.