API REST completa para o sistema de delivery da hamburgueria Royal Burger.
- Sistema de Autenticação JWT - Login seguro com tokens
- Gestão de Usuários - Clientes e funcionários (admin, manager, attendant)
- Catálogo de Produtos - Produtos, seções e ingredientes
- Sistema de Pedidos - Criação, rastreamento e gestão de pedidos
- Chat em Tempo Real - Comunicação entre cliente e atendimento
- Sistema de Notificações - Notificações push para usuários
- Programa de Fidelidade - Pontos e recompensas
- Gestão de Endereços - Múltiplos endereços por cliente
- WebSockets - Comunicação em tempo real
- Python 3.8+
- Firebird 3.0+
- pip (gerenciador de pacotes Python)
git clone <url-do-repositorio>
cd RoyalBurger_Multirepo/RoyalBurgerAPIpython -m venv .venv
# Windows
.venv\Scripts\activate
# Linux/Mac
source .venv/bin/activatepip install -r requirements.txtCrie um arquivo .env na raiz do projeto:
# Configurações de Segurança
SECRET_KEY=sua-chave-secreta-muito-dificil-de-adivinhar-aqui
JWT_SECRET_KEY=sua-outra-chave-jwt-muito-segura-aqui
# Configurações de E-mail
MAIL_SERVER=smtp.gmail.com
MAIL_PORT=587
MAIL_USE_TLS=true
MAIL_USERNAME=seu-email@gmail.com
MAIL_PASSWORD=sua-senha-de-app
# Configurações do Banco de Dados Firebird
FIREBIRD_HOST=localhost
FIREBIRD_PORT=3050
FIREBIRD_USER=SYSDBA
FIREBIRD_PASSWORD=sysdbaCertifique-se de que o Firebird está rodando e que o arquivo de banco royalburger.fdb existe no diretório ../database/.
python run.pyA API estará disponível em http://localhost:5000
Acesse a documentação interativa em: http://localhost:5000/api/docs
POST /api/users/login- Fazer loginPOST /api/users/logout- Fazer logoutPOST /api/users/request-password-reset- Solicitar recuperação de senha (verifica se email existe)POST /api/users/verify-reset-code- Verificar código de recuperaçãoPOST /api/users/reset-password- Redefinir senha com código
POST /api/customers- Cadastrar clienteGET /api/customers- Listar clientes (admin/manager)GET /api/customers/{id}- Obter cliente por IDPUT /api/customers/{id}- Atualizar clienteDELETE /api/customers/{id}- Inativar clienteDELETE /api/customers/delete-account- Deletar própria conta (cliente)
GET /api/products- Listar produtosPOST /api/products- Criar produto (admin/manager)GET /api/products/{id}- Obter produto por IDPUT /api/products/{id}- Atualizar produtoDELETE /api/products/{id}- Inativar produto
POST /api/orders- Criar pedido (cliente)GET /api/orders- Listar pedidos do clienteGET /api/orders/all- Listar todos os pedidos (admin/manager)GET /api/orders/{id}- Obter pedido por IDPATCH /api/orders/{id}/status- Atualizar statusPOST /api/orders/{id}/cancel- Cancelar pedido
GET /api/chats/{order_id}- Obter histórico do chatPOST /api/chats/{order_id}/messages- Enviar mensagem
GET /api/notifications- Listar notificações não lidasPATCH /api/notifications/{id}/read- Marcar como lidaPATCH /api/notifications/read-all- Marcar todas como lidas
GET /api/loyalty/balance/{user_id}- Consultar saldo de pontosGET /api/loyalty/history/{user_id}- Histórico de pontosPOST /api/loyalty/add-points- Adicionar pontos (admin/manager)POST /api/loyalty/spend-points- Gastar pontos (admin/manager)POST /api/loyalty/redeem- Resgatar pontos por descontoPOST /api/loyalty/expire-accounts- Executar expiração de pontosGET /api/loyalty/stats- Estatísticas do sistema (admin/manager)
A API utiliza JWT (JSON Web Tokens) para autenticação. Para acessar endpoints protegidos, inclua o token no header:
Authorization: Bearer <seu_token>
- customer - Cliente comum
- attendant - Atendente
- manager - Gerente
- admin - Administrador
A API suporta WebSockets para funcionalidades em tempo real:
join_chat- Entrar em uma sala de chatsend_message- Enviar mensagemchat_history- Receber históriconew_message- Nova mensagem recebida
const socket = io("http://localhost:5000");
// Entrar no chat do pedido
socket.emit("join_chat", {
token: "seu_jwt_token",
chat_id: 123,
});
// Enviar mensagem
socket.emit("send_message", {
token: "seu_jwt_token",
chat_id: 123,
content: "Olá!",
});
// Escutar mensagens
socket.on("new_message", (data) => {
console.log("Nova mensagem:", data);
});new_kitchen_order— Emitido quando um novo pedido é criado/confirmado. Payload:
{
"order_number": 1024,
"order_type": "Delivery",
"timestamp": "18/10/2025 16:45",
"notes": "Cliente pediu para caprichar no queijo.",
"items": [
{"quantity": 2, "name": "X-Burger Clássico", "extras": [{"type":"add","name":"Bacon","quantity":1}]},
{"quantity": 1, "name": "Batata Frita G"}
]
}
Reimpressão manual (admin/manager): POST /api/orders/{order_id}/reprint.
- 200 - Sucesso
- 201 - Criado com sucesso
- 400 - Dados inválidos
- 401 - Não autenticado
- 403 - Acesso negado
- 404 - Recurso não encontrado
- 409 - Conflito (ex: loja fechada)
- 500 - Erro interno do servidor
- Autenticação JWT com expiração
- Validação de senhas fortes
- Validação de CPF
- Sanitização de dados de entrada
- CORS configurado
- Headers de segurança
RoyalBurgerAPI/
├── src/
│ ├── routes/ # Rotas da API
│ ├── services/ # Lógica de negócio
│ ├── sockets/ # Eventos WebSocket
│ ├── templates/ # Templates de e-mail
│ ├── utils/ # Utilitários
│ └── openapi/ # Documentação Swagger
├── requirements.txt # Dependências Python
└── run.py # Arquivo principal
- Crie o arquivo de rota em
src/routes/ - Implemente o serviço em
src/services/ - Registre a rota em
src/__init__.py - Atualize a documentação Swagger
Use a documentação Swagger em http://localhost:5000/api/docs para testar os endpoints ou ferramentas como Postman/Insomnia.
- ✅ Expiração de token JWT configurada (1 hora por padrão)
- ✅ Validação de formato de e-mail implementada
- ✅ Validação de número de telefone brasileiro implementada
- ✅ Rota de logout adicionada
- ✅ Rota de exclusão de conta para clientes
- ✅ Mensagens de erro mais claras e específicas
- ✅ Documentação Swagger completa
- ✅ Sistema de autenticação JWT corrigido
- ✅ Templates de e-mail criados
- ✅ WebSockets funcionando
- ✅ Todas as rotas documentadas
- ✅ Validações implementadas
- 🎉 Versão inicial da API
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Para suporte, entre em contato:
- Email: dev@royalburger.com
- Documentação:
http://localhost:5000/api/docs