Skip to content

Repository files navigation

BurgerApp - Sistema Completo de Pedidos para Hamburgueria

Vue.js Go PostgreSQL Docker Swagger

Plataforma full stack para operacao de pedidos de hamburgueria, com foco em produtividade de atendimento, fluxo de cozinha e consistencia de dados.


Sumario


Visao de Produto

O BurgerApp cobre a jornada completa do pedido:

  1. Cliente navega no cardapio.
  2. Cliente monta burger customizado.
  3. Pedido e enviado para API.
  4. Cozinha recebe em painel operacional.
  5. Time atualiza status ate entrega.

Resultado: menos atrito no atendimento, melhor visibilidade da cozinha e controle total de pedidos.


Arquitetura

Diagrama de alto nivel

┌──────────────────────────────┐       HTTP/JSON       ┌──────────────────────────────┐
│ Frontend Web                 │ <-------------------> │ Backend API                   │
│ Vue 3 + Vite                 │                       │ Go + Gin                      │
│ Porta 5173                   │                       │ Porta 8080                    │
└──────────────────────────────┘                       └───────────────┬──────────────┘
                                                                        │
                                                                        │ SQL
                                                                        ▼
                                                             ┌───────────────────────────┐
                                                             │ PostgreSQL                │
                                                             │ Porta 5432                │
                                                             └───────────────────────────┘

Principios de arquitetura

  • Frontend desacoplado da persistencia: comunicacao apenas via API.
  • Backend com responsabilidade de validacao, regra e orquestracao de fluxo.
  • Banco relacional para integridade e rastreabilidade de pedidos.
  • Contratos HTTP claros e testaveis com Swagger.

Fluxo operacional

Cardapio/Montagem -> POST /api/orders -> Persistencia -> Painel de Cozinha
Painel de Cozinha -> PUT /api/orders/:id/status -> Atualizacao de estado -> Recarregamento da fila

Prints da Aplicacao

Sugestao: colocar as capturas em ./docs/prints/ e manter nome padrao por tela.

1) Tela inicial e cardapio

Tela inicial e cardapio

2) Montagem personalizada

Montagem personalizada

3) Confirmacao de pedido

Confirmacao de pedido

4) Painel da cozinha

Painel da cozinha

5) Status de pedidos

Status de pedidos


Funcionalidades

Cardapio inteligente

  • Listagem de produtos por categoria.
  • Cards com imagem, descricao e preco.
  • Disponibilidade controlada por produto.

Montador de burger

  • Selecao de ingredientes por tipo (pao, carne, queijo, molho etc.).
  • Composicao de itens customizados por pedido.
  • Ajuste de observacoes por item.

Gestao de pedidos

  • Criacao de pedido com dados estruturados.
  • Registro de itens e totais.
  • Persistencia em banco de dados.

Painel de cozinha

  • Lista de pedidos em andamento.
  • Atualizacao de status: pending -> preparing -> ready -> delivered.
  • Visualizacao orientada a operacao.

Persistencia e continuidade

  • Dados nao se perdem em recarregamento.
  • Historizacao via timestamps.
  • Integridade de relacionamento por chaves estrangeiras.

Stack Tecnologica

Frontend

  • Vue.js 3 com Composition API.
  • Vite para desenvolvimento e build.
  • CSS3 para UI responsiva e visual consistente.

Backend

  • Go 1.23.
  • Gin para API REST.
  • lib/pq para acesso ao PostgreSQL.

Dados

  • PostgreSQL 12+.
  • Modelo relacional com tabelas de dominio e relacionamento.

Ferramentas de apoio

  • Swagger para exploracao e teste de endpoints.
  • Docker para subida rapida dos servicos.

Estrutura do Projeto

Projeto/
├── projeto-hamburgueria/
│   ├── src/
│   │   ├── components/
│   │   │   ├── Header.vue
│   │   │   ├── Menu.vue
│   │   │   ├── Kitchen.vue
│   │   │   └── CustomBurger.vue
│   │   ├── assets/
│   │   ├── App.vue
│   │   ├── api.js
│   │   └── main.js
│   ├── public/
│   └── package.json
│
├── backend-hamburgueria/
│   ├── config/
│   │   └── config.go
│   ├── database/
│   │   └── database.go
│   ├── handlers/
│   │   └── handlers.go
│   ├── models/
│   │   └── models.go
│   ├── routes/
│   │   └── routes.go
│   ├── scripts/
│   ├── main.go
│   └── go.mod
│
└── READMES.md

Modelo de Dados

Tabelas centrais

categories

  • id: chave primaria
  • name: nome da categoria
  • description: descricao
  • created_at: auditoria de criacao

products

  • id: chave primaria
  • name: nome do produto
  • description: descricao do produto
  • price: preco de venda
  • category_id: referencia de categoria
  • image_url: imagem do cardapio
  • is_available: disponibilidade
  • created_at: auditoria de criacao

ingredients

  • id: chave primaria
  • name: nome do ingrediente
  • price: adicional
  • category: agrupamento logico
  • is_available: disponibilidade
  • created_at: auditoria de criacao

orders

  • id: chave primaria
  • customer_name: cliente
  • table_number: mesa
  • total_amount: total do pedido
  • status: estado operacional
  • notes: observacoes gerais
  • created_at: criacao
  • updated_at: atualizacao

order_items

  • id: chave primaria
  • order_id: referencia do pedido
  • product_id: referencia de produto
  • ingredients: payload de customizacao
  • quantity: quantidade
  • unit_price: valor unitario
  • total_price: valor total do item
  • notes: observacoes do item
  • created_at: criacao

API e Endpoints

Swagger

Com backend ativo:

  • http://localhost:8080/swagger/index.html

Endpoints de leitura

GET /api/products
GET /api/categories
GET /api/ingredients
GET /api/orders
GET /api/orders?status=preparing
GET /api/orders/:id
GET /health

Endpoints de escrita

POST /api/orders
PUT  /api/orders/:id/status

Exemplo de fluxo de requisicao

  1. Frontend consome /api/products e /api/ingredients.
  2. Usuario monta pedido no cliente.
  3. Frontend envia POST /api/orders.
  4. Cozinha atualiza progresso com PUT /api/orders/:id/status.

Como Rodar Localmente

Pre-requisitos

  • Node.js 18+
  • Go 1.23+
  • PostgreSQL 12+

Passo 1 - Banco de dados

createdb hamburgueria

Alternativa:

psql -U postgres -c "CREATE DATABASE hamburgueria;"

Passo 2 - Backend

cd backend-hamburgueria
go mod download
go run main.go

Backend: http://localhost:8080

Passo 3 - Frontend

cd projeto-hamburgueria
npm install
npm run dev

Frontend: http://localhost:5173

Passo 4 - Validacao rapida

  • Abrir app web no navegador.
  • Criar um pedido de teste.
  • Verificar pedido no painel da cozinha.
  • Atualizar status e confirmar persistencia.

Variaveis de Ambiente

Frontend (.env)

VITE_API_URL=http://localhost:8080/api

Backend (.env)

PORT=8080
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=postgres
DB_NAME=hamburgueria
JWT_SECRET=trocar_em_producao

Qualidade e Engenharia

Checklist tecnico

  • Arquitetura em camadas (UI -> API -> DB).
  • Regras de negocio centralizadas no backend.
  • Persistencia relacional com integridade referencial.
  • Contratos de API navegaveis via Swagger.

Backend quality gate

cd backend-hamburgueria
go test ./...
go vet ./...
gofmt -w .

Frontend quality gate

cd projeto-hamburgueria
npm run lint
npm run test
npm run build

Seguranca e robustez

  • Validacao de input no frontend e backend.
  • Uso de prepared statements.
  • Operacoes sensiveis com transacoes curtas.
  • CORS configurado por ambiente.

Deploy

Docker Compose (local/staging)

docker-compose up -d

Verificacoes pos-deploy

  • Frontend responde em :5173.
  • Backend responde em :8080.
  • Endpoint /health retorna sucesso.
  • Swagger acessivel.

Operacao e Monitoramento

Indicadores recomendados

  • tempo medio entre criacao e entrega de pedido;
  • quantidade de pedidos por status;
  • taxa de erro em criacao de pedido;
  • disponibilidade da API (/health).

Logs recomendados

  • erro de validacao de payload;
  • erro de conexao com banco;
  • falha de transicao de status;
  • tempo de resposta por endpoint.

Roadmap Sugerido

  • Autenticacao para painel de cozinha.
  • Impressao automatica de pedidos.
  • WebSocket para atualizacao em tempo real sem polling.
  • Dashboard com metricas operacionais.
  • Painel administrativo para produtos/ingredientes/categorias.

Autor

  • Thiago Matos Tertuliano

BurgerApp foi desenhado para escalar de MVP para operacao real com base tecnica limpa, observavel e facil de manter.

About

Sistema completo de pedidos para hamburgueria desenvolvido com frontend em Vue.js 3 e backend em Go. O projeto permite visualizar o cardápio, montar lanches personalizados e gerenciar pedidos em tempo real através de uma interface moderna e responsiva, com persistência completa em banco de dados PostgreSQL.

Topics

Resources

Security policy

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages