Au 04 - Back-end - Node.js - Modelando o produto - Mestres BEGIN
Nesta aula, vamos estruturar nosso modelo de produtos e criar as rotas básicas para operações CRUD em nossa API.
Estrutura do Modelo de Produto
Criamos um modelo para produtos com os seguintes campos:
1import { Schema, model } from "mongoose";
2const productSchema = new Schema({
3 category: { type: String, required: true },
4 brand: { type: String, required: true },
5 store: { type: String, required: true },
6 name: { type: String, required: true },
7 price: { type: Number, required: true },
8 previousPrice: { type: Number },
9 description: { type: String },
10 quantity: { type: Number, required: true }
11});
12export const Product = model("Product", productSchema);
Organização do Projeto
Estrutura de pastas recomendada:
- src/models/ - Modelos do MongoDB
- products/ - Modelo específico de produtos
- src/routes/ - Definição de rotas da API
Criação das Rotas Básicas
Configuramos um router com os principais métodos HTTP:
1import express from "express";
2const router = express.Router();
3// GET /products - Listar produtos
4router.get("/products", (req, res) => {
5 res.status(200).json({ ok: true });
6});
7// POST /products - Criar novo produto
8router.post("/products", (req, res) => {
9 // Implementação futura
10});
11// PATCH /products/:id - Atualizar produto
12router.patch("/products/:id", (req, res) => {
13 // Implementação futura
14});
15// DELETE /products/:id - Remover produto
16router.delete("/products/:id", (req, res) => {
17 // Implementação futura
18});
19export default router;
Integração com a Aplicação Principal
No arquivo principal (index.ts):
1import router from "./routes";
2// ... outras configurações ...
3app.use(router); // Registra todas as rotas
Próximos Passos
Nas próximas aulas vamos implementar:
- Operação GET para listar produtos do banco
- Operação POST para criar novos produtos
- Validação dos dados recebidos
- Tratamento de erros específicos
- Operações PATCH e DELETE completas
Considerações Finais
Esta estrutura inicial proporciona uma base sólida para nosso CRUD de produtos. Algumas melhorias futuras incluem:
- Validação mais robusta dos campos
- Paginação para listagem de produtos
- Filtros avançados nas consultas
- Deleção lógica em vez de física
- Separação em controllers para melhor organização
Lembre-se que em um projeto real, você provavelmente dividiria os modelos de categoria, marca e loja em coleções separadas com relacionamentos, mas para fins didáticos, começamos com esta estrutura simplificada.