Projeto de estudo feito para praticar uma aplicação full stack com CRUD de produtos.
O objetivo aqui não é apenas mostrar o resultado final, mas também deixar claro o que foi usado em cada parte do sistema e como as peças se conectam.
A aplicação está publicada no Render e pode ser acessada por aqui: https://product-store-react.onrender.com
Esta aplicação permite:
- listar produtos cadastrados
- criar novos produtos
- atualizar produtos existentes
- excluir produtos
O frontend consome a API do backend, e os dados são persistidos no MongoDB.
- Node.js: ambiente de execução do JavaScript no servidor
- Express: criação da API REST
- Mongoose: modelagem e acesso ao MongoDB
- dotenv: carregamento de variáveis de ambiente
- nodemon: reinicialização automática do servidor durante o desenvolvimento
- cross-env: compatibilidade de variáveis de ambiente entre sistemas operacionais
- React: construção da interface
- Vite: ferramenta de build e ambiente de desenvolvimento
- React Router DOM: rotas entre as páginas
- Chakra UI: componentes de interface e estilos
- Zustand: gerenciamento de estado global dos produtos
- Framer Motion: animações
- react-icons: ícones
- next-themes: suporte a tema
O backend está na pasta backend/ e segue uma estrutura simples de API REST:
server.js: inicializa o servidor Express, registra as rotas e sobe a aplicaçãoconfig/db.js: faz a conexão com o MongoDBmodels/product.model.js: define o schema de produto no Mongoosecontrollers/product.controller.js: concentra a lógica das operações de CRUDroutes/product.route.js: expõe os endpoints da API
Os endpoints disponíveis são:
GET /api/products: lista todos os produtosPOST /api/products: cria um produtoPUT /api/products/:id: atualiza um produtoDELETE /api/products/:id: remove um produto
O frontend está na pasta frontend/ e foi construído com Vite + React:
src/main.jsx: ponto de entrada da aplicaçãosrc/App.jsx: define a estrutura geral e as rotassrc/pages/HomePage.jsx: página inicial com a listagem dos produtossrc/pages/CreatePage.jsx: página para cadastrar novos produtossrc/components/Navbar.jsx: navegaçãosrc/components/ProductCard.jsx: card individual de produtosrc/store/product.js: store com Zustand para buscar, criar, atualizar e excluir produtos
- O frontend carrega a página inicial e busca os produtos na API.
- A store com Zustand centraliza o estado dos produtos.
- As ações de criar, editar e excluir fazem chamadas para o backend.
- O backend valida os dados, conversa com o MongoDB e devolve a resposta em JSON.
- A interface atualiza sem precisar recarregar a página.
- Node.js instalado
- MongoDB local ou remoto
- Variável de ambiente
MONGO_URIconfigurada
Crie um arquivo .env na raiz do projeto com algo como:
PORT=5000
MONGO_URI=sua_string_de_conexao_do_mongodbNa raiz do projeto:
npm install
npm install --prefix frontendAbra dois terminais:
npm run devEsse comando inicia o backend em modo desenvolvimento.
No outro terminal:
npm run dev --prefix frontendIsso sobe o frontend com Vite.
Na raiz do projeto:
npm run buildEsse script instala as dependências necessárias e gera o build do frontend.
Depois do build, inicie o backend com:
npm startEm produção, o backend também serve os arquivos estáticos gerados pelo frontend.
Este projeto foi montado para praticar conceitos essenciais de uma aplicação full stack:
- integração entre frontend e backend
- criação de API REST
- persistência de dados com MongoDB
- organização em camadas: rotas, controllers, models e store
- gerenciamento de estado no React
- uso de componentes de UI prontos para acelerar a montagem da interface
product-store/
├── backend/
│ ├── config/
│ ├── controllers/
│ ├── models/
│ ├── routes/
│ └── server.js
├── frontend/
│ ├── src/
│ │ ├── components/
│ │ ├── pages/
│ │ └── store/
│ └── vite.config.js
└── README.md