Aula 12 – Projeto Prático II (CRUD Completo) 🚀
Nesta aula prática, vamos aplicar a "Trindade do Vue Moderno": Vue Router + Axios + Pinia. O objetivo é construir um sistema de Gerenciamento de Produtos com persistência em uma API simulada.
🎯 Escopo do Projeto
Vamos desenvolver um CRUD (Create, Read, Update, Delete) que realize: 1. Listagem: Buscar produtos de uma API e exibir em cards (Axios + Pinia). 2. Criação: Formulário para adicionar novos itens (POST). 3. Edição: Alterar dados de um produto existente (PUT). 4. Exclusão: Remover itens da API e da tela (DELETE). 5. Navegação: Páginas separadas para "Home", "Produtos" e "Novo Produto".
🏗️ Arquitetura em Camadas
A organização profissional separa as responsabilidades:
graph TD
View[Views / Páginas] --> Store[Pinia Stores]
Store --> Service[Axios Services]
Service --> API[(API Externa)]
O que cada camada faz?
- Service: Apenas faz a requisição
axios.get('/produtos'). - Store: Chama o service e guarda o resultado na
ref([]). - View: Apenas exibe o que está na Store e chama funções de clique.
🖥️ Estrutura de Pastas Recomendada
💡 Dicas de Implementação
API de Teste
Use o JSON Server localmente para ter uma API real rodando em minutos, ou use mocks simples no código se preferir focar apenas no Vue.
Chave Reativa
Ao editar um produto, lembre-se de usar o useRoute().params.id do Vue Router para buscar o ID correto da URL.
📊 Fluxo de Dados do CRUD
sequenceDiagram
participant U as Usuário
participant V as View
participant S as Store
participant A as API
U->>V: Clica em 'Excluir'
V->>S: store.excluir(id)
S->>A: DELETE /produtos/1
A-->>S: 200 OK
S->>S: Remove do array local
Note right of S: Reatividade atualiza a View automaticamente!
📝 Checkpoint de Entrega
Para concluir esta aula, o aluno deve demonstrar: 1. Navegação fluida entre páginas sem recarregar o browser. 2. Dados sendo buscados de uma fonte externa (real ou mock). 3. Uso do Pinia para gerenciar o array de produtos.
🚀 Próximo Módulo: Vamos profissionalizar ainda mais com Boas Práticas, Estilização e Deploy!