---
# System prepended metadata

title: Documentação do Sistema de Controle de Estoque

---

# Sistema de Controle de Estoque


## Funcionalidades

- Consumir um csv com a lista de produtos
- Inserir produtos
- Atualizar produtos (nome, quantidade, preço e categoria)
- Excluir produtos
- Gerar um csv atualizado
- Listar e ordenar produtos por: categoria, preço, datas, nome

## Classe `Product`

Representa um produto no inventário.

### Campos

- `name`: O nome do produto.
- `quantity`: A quantidade do produto no estoque.
- `price`: O preço do produto.
- `creationDate`: A data de criação do produto.
- `category`: A categoria do produto.
- `updateDate`: A data da última atualização do produto.

### Métodos

- `getName()`: Retorna o nome do produto.
- `getQuantity()`: Retorna a quantidade do produto.
- `getPrice()`: Retorna o preço do produto.
- `getCreationDate()`: Retorna a data de criação do produto.
- `getCategory()`: Retorna a categoria do produto.
- `getUpdateDate()`: Retorna a data da última atualização do produto.

---

## Classe `Inventory`

Representa o inventário de produtos.

### Campos

- `products`: Uma lista de produtos no inventário.

### Métodos

- `addProduct(Product product)`: Adiciona um produto ao inventário.
- `removeProduct(Product product)`: Remove um produto do inventário.
- `getProducts()`: Retorna a lista de produtos no inventário.
- `consumeCSV(String fileName)`: Lê um arquivo CSV e adiciona todos os produtos listados no arquivo ao inventário.
- `generateCSV(String fileName)`: Escreve a lista atual de produtos no inventário para um arquivo CSV.
- `listAndSortProducts(String sortBy)`: Retorna a lista de produtos no inventário, ordenada por um critério especificado.

---

## Classe `CSVHandler`

Fornece métodos para ler e escrever arquivos CSV.

### Métodos

- `writeCSV(List<Product> products, String fileName)`: Escreve uma lista de produtos para um arquivo CSV.
- `readCSV(String fileName)`: Lê um arquivo CSV e retorna um `Inventory` com os produtos listados no arquivo.

---

## Classe `Main`

Executa o programa.

### Métodos

- `main(String[] args)`: O ponto de entrada do programa. Cria um novo inventário, consome um arquivo CSV, lista e ordena produtos, e gera um novo arquivo CSV.

---
