Skip to content

🚂 Backend Node.js + Express + Socket.io para sistema de pedidos de coquetéis em tempo real

Notifications You must be signed in to change notification settings

Hanksx/Cocktail-Backend

Repository files navigation

🍹 Cocktail Manager Backend

Backend Node.js para sincronização de pedidos entre dispositivos diferentes.

✨ Funcionalidades

  • 📡 Tempo Real: WebSocket com Socket.io
  • 🔄 Sincronização: Entre dispositivos diferentes
  • 💾 Persistência: Armazenamento em memória (pronto para database)
  • 🛡️ Segurança: CORS, Helmet, Compression
  • 📋 API REST: Endpoints completos para pedidos e mesas

🚀 Instalação Rápida

# Entrar na pasta do backend
cd backend

# Instalar dependências
npm install

# Rodar em desenvolvimento
npm run dev

# Ou rodar em produção
npm start

🌐 Endpoints da API

📋 Pedidos (/api/orders)

Método Endpoint Descrição
GET /api/orders Listar todos os pedidos
GET /api/orders/:id Buscar pedido específico
POST /api/orders Criar novo pedido
PATCH /api/orders/:id/status Atualizar status
DELETE /api/orders/:id Cancelar pedido
GET /api/orders/stats/today Estatísticas do dia

🪑 Mesas (/api/tables)

Método Endpoint Descrição
GET /api/tables/:tableNumber/orders Pedidos da mesa
GET /api/tables/:tableNumber/status Status da mesa
POST /api/tables/:tableNumber/orders Criar pedido para mesa
GET /api/tables/summary Resumo de todas as mesas

📡 Eventos WebSocket

📤 Eventos Emitidos pelo Servidor

// Novo pedido criado
socket.on('order-created', (data) => {
  console.log('Novo pedido:', data.order);
});

// Status de pedido atualizado
socket.on('order-status-updated', (data) => {
  console.log('Status alterado:', data.status);
});

// Pedido cancelado
socket.on('order-cancelled', (data) => {
  console.log('Pedido cancelado:', data.orderId);
});

// Status de mesa atualizado
socket.on('table-status-updated', (data) => {
  console.log('Mesa alterada:', data.tableNumber);
});

📥 Eventos Recebidos pelo Servidor

// Entrar em sala específica
socket.emit('join-room', 'admin'); // ou 'table-01'

// Teste de conectividade
socket.emit('ping');

🧪 Testando a API

Health Check

curl http://localhost:3002/health

Criar Pedido

curl -X POST http://localhost:3002/api/orders \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      {"id": "mojito", "name": "Mojito", "quantity": 2, "price": 15.90}
    ],
    "tableNumber": "01",
    "customerName": "João"
  }'

Listar Pedidos

curl http://localhost:3002/api/orders

🔧 Configuração

Variáveis de Ambiente

Crie um arquivo .env:

PORT=3002
NODE_ENV=development

Customização

  • Porta: Altere PORT no .env
  • CORS: Edite cors.origin em server.js
  • Database: Substitua OrderRepository.js por integração real

🏗️ Estrutura do Projeto

backend/
├── controllers/           # Controladores da API
│   ├── orderController.js # Endpoints de pedidos
│   └── tableController.js # Endpoints de mesas
├── models/               # Modelos de dados
│   ├── Order.js         # Classe Order
│   └── OrderRepository.js # Repositório em memória
├── server.js            # Servidor principal
├── package.json         # Dependências
└── README.md           # Este arquivo

🔌 Integração com Frontend

1. Instalar Socket.io no Frontend

npm install socket.io-client

2. Conectar ao Backend

import io from 'socket.io-client';

const socket = io('http://localhost:3002');

// Escutar eventos
socket.on('order-created', (data) => {
  // Atualizar UI com novo pedido
});

3. Fazer Requisições HTTP

// Criar pedido
const response = await fetch('http://localhost:3002/api/orders', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify(orderData)
});

🚀 Deploy

Render.com (Recomendado)

  1. Conecte seu repositório GitHub
  2. Configure:
    • Build Command: npm install
    • Start Command: npm start
    • Environment: Node.js
  3. Deploy automático! 🎉

Docker

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY . .
EXPOSE 3002
CMD ["npm", "start"]

📊 Logs e Monitoramento

O servidor gera logs detalhados:

🚀 ===================================
🍹 Cocktail Manager Backend iniciado!
🌐 Servidor rodando na porta: 3002
📡 Socket.io configurado para tempo real
🔗 Health check: http://localhost:3002/health
🧪 Teste: http://localhost:3002/api/test
🚀 ===================================

🔧 Próximos Passos

  1. Database Real: PostgreSQL, MongoDB, MySQL
  2. Autenticação: JWT, OAuth2
  3. Rate Limiting: Prevenir spam
  4. Logs Estruturados: Winston, Morgan
  5. Testes: Jest, Supertest
  6. CI/CD: GitHub Actions

🆘 Solução de Problemas

Porta em Uso

# Verificar processo na porta 3002
lsof -ti:3002

# Matar processo
kill -9 $(lsof -ti:3002)

CORS Errors

Adicione sua URL no cors.origin em server.js:

cors: {
  origin: ["http://localhost:3001", "https://meudominio.com"]
}

🎯 Status do Projeto

  • API REST: Completa
  • WebSocket: Funcionando
  • Modelos: Compatíveis
  • Database: Em memória (pronto para migração)
  • Autenticação: Básica

Pronto para produção com database real! 🚀

About

🚂 Backend Node.js + Express + Socket.io para sistema de pedidos de coquetéis em tempo real

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published