Files
DBE-S04/README.md
T

154 lines
5.0 KiB
Markdown

# DBE-S04 - Cadastro e Listagem de Instrumentos Musicais
**Aluno:** Anderson Valadares Pinto (20251PL.TSIAD0018) [SLS]
Aplicação web desenvolvida para a disciplina de **Desenvolvimento Back-End (DBE)** - Semana 04. O projeto demonstra o cadastro e a listagem de instrumentos musicais em uma loja, utilizando **Node.js**, **Express**, **EJS**, **MongoDB** (com Mongoose) e estilização com **Bootstrap 5**.
---
## 🛠️ Tecnologias Utilizadas
- **Node.js**: Ambiente de execução JavaScript no servidor com suporte a **ES Modules** (`"type": "module"`).
- **Express.js**: Framework minimalista para criação de servidores HTTP e roteamento dinâmico.
- **EJS (Embedded JavaScript)**: Mecanismo de templates para renderização dinâmica no lado do servidor (SSR).
- **MongoDB + Mongoose**: Banco de dados orientado a documentos e modelagem dos instrumentos.
- **Bootstrap 5 & Bootstrap Icons (CDN)**: Framework CSS responsivo e ícones para uma interface moderna e acessível.
---
## 🎸 Instrumentos de Teste
O script `seed.js` cadastra seis instrumentos, atendendo às orientações da atividade:
| Nome | Fabricante | Preço | Tipo |
|---|---|---|---|
| Guitarra Elétrica Stratocaster | Fender | R$ 5.490,00 | Cordas |
| Guitarra Acústica Folk | Yamaha | R$ 2.190,00 | Cordas |
| Baixo Elétrico SR300 | Ibanez | R$ 3.890,00 | Cordas |
| Bateria Acústica Roadshow | Pearl | R$ 7.290,00 | Percussão |
| Teclado Digital Juno-DS61 | Roland | R$ 4.590,00 | Teclas |
| Saxofone Alto YAS-280 | Yamaha | R$ 6.290,00 | Sopro |
Há três instrumentos do tipo **Cordas**, preços diferentes e nomes que permitem testar uma pesquisa por "Guitarra", "Yamaha" ou "Elétrica" posteriormente.
---
## 📌 Rotas e Endpoints
| Método | Rota | Descrição |
|---|---|---|
| `GET` | `/` | Redireciona para a listagem de instrumentos. |
| `GET` | `/instrumentos` | Lista todos os instrumentos cadastrados, com nome, fabricante, tipo, preço e botão direto para novo cadastro. |
| `GET` | `/instrumentos/add` | Exibe o formulário de cadastro com link direto de retorno à listagem. |
| `POST` | `/instrumentos` | Recebe os dados do formulário, grava no MongoDB e exibe a confirmação. |
### Exemplos de URLs para Testes:
- `http://localhost:3000/instrumentos` — Listagem completa do estoque
- `http://localhost:3000/instrumentos/add` — Formulário de cadastro
- `http://localhost:3000/naoexiste` — Resposta de página não encontrada (404)
---
## 📂 Estrutura do Projeto
```
DBE-S04/
├── models/
│ └── Instrumento.js # Schema e validações do instrumento
├── routes/
│ └── instrumento.js # Rotas de cadastro e listagem
├── views/
│ ├── instrumento/
│ │ ├── add.ejs # Formulário de cadastro
│ │ ├── addok.ejs # Confirmação do cadastro
│ │ └── lst.ejs # Listagem tabular com loop EJS
│ └── erro.ejs # Páginas de erro 404 e 500
├── .gitignore
├── app.js # Servidor Express, EJS e conexão com o MongoDB
├── seed.js # Popula o banco com instrumentos de teste
├── package.json # Configurações do projeto e dependências
└── README.md # Documentação do projeto
```
---
## 🚀 Como Executar o Projeto Localmente
Pré-requisitos: **Node.js 18+** e **MongoDB** escutando em `127.0.0.1:27017`.
1. **Clone o repositório:**
```bash
git clone https://gitea.tsiad.com.br/anderson/DBE-S04.git
cd DBE-S04
```
2. **Instale as dependências:**
```bash
npm install
```
3. **Popule o banco com os instrumentos de teste (opcional):**
```bash
npm run seed
```
4. **Inicie a aplicação:**
- Modo padrão:
```bash
npm start
```
- Modo de desenvolvimento (watch mode):
```bash
npm run dev
```
- Em caso de porta `3000` reservada pelo Windows/Hyper-V:
```bash
PORT=4000 npm start
```
5. **Acesse no navegador:**
[http://localhost:3000/instrumentos](http://localhost:3000/instrumentos)
---
## ⚙️ Configuração
As variáveis de ambiente são opcionais:
| Variável | Padrão |
|---|---|
| `PORT` | `3000` |
| `MONGODB_URI` | `mongodb://127.0.0.1:27017/loja_instrumentos` |
Exemplo:
```bash
MONGODB_URI="mongodb://127.0.0.1:27017/loja_instrumentos" PORT=3000 npm start
```
---
## 🗃️ Modelo `Instrumento`
| Campo | Tipo | Regras |
|---|---|---|
| `nome` | String | obrigatório, até 120 caracteres |
| `fabricante` | String | obrigatório, até 120 caracteres |
| `preco` | Number | obrigatório, maior ou igual a zero |
| `tipo` | String | obrigatório, um dos tipos da lista |
Tipos aceitos: Cordas, Percussão, Teclas, Sopro, Áudio e Acessórios.
---
## 📸 Telas
![Listagem de instrumentos](docs/listagem.png)
![Formulário de cadastro](docs/cadastro.png)
![Confirmação do cadastro](docs/confirmacao.png)
A listagem também funciona em telas pequenas (a tabela rola na horizontal):
[docs/listagem-mobile.png](docs/listagem-mobile.png).