É uma API REST desenvolvida em Java com Spring Boot que implementa as melhores práticas de desenvolvimento backend, oferecendo uma solução completa para gestão dos produtos e pedidos do EyeGen, além de cadastro e login seguros.
O projeto foi construído com foco em:
- ✅ Clean Code - Código limpo e manutenível
- 🏗️ Arquitetura em Camadas - Separação clara de responsabilidades
- 🔐 Segurança Robusta - JWT + Spring Security
- 📊 Persistência Eficiente - Spring Data JPA + Flyway Migrations
- 🎯 Validações Consistentes - Bean Validation para validações dos dados enviados para a API
- ⚙️ Tratamento erros - Tratamento de erros globais
O EyeGen está consolidando uma plataforma completa para os usuários com deficiência visual, onde futuramente poderam:
- 🔍 Adquirir óculos o EyeGlass (Ainda é um MVP)
- 📋 Contratar planos nossos planos
- 🔧 Agendar manutenções preventivas
- Cadastro de novos usuários com validação de dados
- Login seguro com geração de tokens JWT
- Proteção de endpoints com Spring Security
- Senhas criptografadas com BCrypt
- Tokens com expiração configurável
- Criação de pedidos com múltiplos itens
- Cálculo automático de valores totais
- Suporte a diferentes métodos de pagamento
- Validação de estoque e disponibilidade de produtos
- Rastreamento de status dos pedidos
- Perfis de usuário completos
- Validação de e-mails duplicados
- Dados de autenticação seguros
POST /usuarios/cadastroRequest Body:
{
"nome": "João Silva",
"email": "joao@email.com",
"senha": "senha123",
"data_nascimento": "20-08-2005",
"telefone": "11987654321",
"tipo_def_visual": "BAIXA_VISAO"
}Response: 201 Created
{
"nome": "João Silva",
"email": "joao@email.com",
"senha": "senha123",
"data_nascimento": "20-08-2005",
"telefone": "11987654321",
"tipo_def_visual": "BAIXA_VISAO"
}POST /usuarios/loginRequest Body:
{
"email": "joao@email.com",
"senha": "senha123"
}Response: 200 OK
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}POST /pedidos
Authorization: Bearer {token}Request Body:
{
"idUsuario": 2,
"metodoPagamento": "PIX",
"itens": [
{
"idProduto": 1,
"quantidade": 1
},
{
"idProduto": 3,
"quantidade": 1
}
]
}Response: 201 Created
{
"dataRealizacao": "2026-02-12T14:30:00",
"status": "PENDENTE",
"metodoPagamento": "PIX",
"valorTotal": 3060.00,
"idUsuario": 2,
"itens": [
{
"produto": {
"nome": "EyeGlass"
"precoUnitario": 3000.00,
"quantidade": 1,
"total": 3000.00
},
"produto": {
"nome": "Guardian"
"precoUnitario": 60.00,
"quantidade": 1,
"total": 60.00
},
}
]
}- Java 17 - Linguagem de programação
- Spring Boot 3.x - Framework principal
- Maven - Gerenciamento de dependências
- Spring Security - Framework de autenticação e autorização
- JWT (JsonWebToken) - Geração e validação de tokens
- BCrypt - Algoritmo de hash para senhas
- Spring Data JPA - Abstração de acesso a dados
- MySQL 8.0 - Banco de dados relacional
- Flyway - Versionamento de banco de dados
- Lombok - Redução de código boilerplate
- Bean Validation - Validação de dados
- Records (Java 17) - DTOs imutáveis
- Docker - Containerização da aplicação
EyeGen-Back-End/
│
├── src/
│ └── main/
│ └── java/
│ └── br.com.eyegen.api_eyegen/
│ │
│ ├── controller/ # Controladores REST
│ │ ├── AutenticacaoController.java
│ │ └── PedidoController.java
│ │
│ ├── domain/ # Camada de Domínio
│ │ │
│ │ ├── assinatura/ # Dominio da Assinatura (Entidade, DTO e enums)
│ │ │ ├── Assinatura.java
│ │ │ ├── DadosAssinatura.java
│ │ │ └── enums/
│ │ │
│ │ ├── dispositivo/ # Dominio do dispositivo EyeGlass (Entidade, DTO e enums)
│ │ │ ├── Dispositivo.java
│ │ │ ├── DadosDispositivo.java
│ │ │ └── enums/
│ │ │
│ │ ├── item_pedido/ # Dominio do ItemPedido (Entidade, DTO e enums)
│ │ │ ├── ItemPedido.java
│ │ │ ├── DadosItemPedido.java
│ │ │ └── DadosItemResposta.java
│ │ │
│ │ ├── manutencao/ # Dominio da manutenção (Entidade, DTO e enums)
│ │ │ ├── Manutencao.java
│ │ │ ├── DadosManutencao.java
│ │ │ └── enums/
│ │ │
│ │ ├── pedido/ # Dominio do Pedido (Entidade, DTO e enums)
│ │ │ ├── Pedido.java
│ │ │ ├── DadosRealizaPedido.java
│ │ │ ├── DadosRespostaPedido.java
│ │ │ └── enums/
│ │ │ ├── StatusPedido.java
│ │ │ └── DadosRealizaPedido.java
│ │ │
│ │ ├── produto/ # Dominio do Produto (Entidade, DTO e enums)
│ │ │ ├── Produto.java
│ │ │ └── enums/
│ │ │
│ │ └── usuario/ # Agregado de Usuário
│ │ ├── Usuario.java
│ │ ├── DadosAutenticacao.java
│ │ ├── DadosCadastroUsuario.java
│ │ ├── DadosRespostaUsuario.java
│ │ └── enums/
│ │
│ ├── infra/ # Camada de Infraestrutura
│ │ ├── exception/ # Tratamento de Exceções
│ │ │ └── ControllerExceptionHandler.java
│ │ │
│ │ └── security/ # Configurações de Segurança
│ │ ├── SecurityConfigurations.java
│ │ ├── SecurityFilter.java
│ │ └── TokenService.java
│ │
│ ├── repository/ # Repositórios JPA
│ │ ├── PedidoRepository.java
│ │ ├── ProdutoRepository.java
│ │ └── UsuarioRepository.java
│ │
│ ├── services/ # Camada de Regras de Negócio
│ │ ├── AutenticacaoService.java
│ │ ├── CadastroUsuarioService.java
│ │ └── PedidoService.java
│ │
│ └── ApiEyegenApplication.java
│
├── resources/
│ ├── application.properties # Configurações da aplicação
│ ├── application-dev.properties # Configurações da desenvolvimento
│ ├── application-prod.properties # Configurações de produção
│ └── db/
│ └── migration/ # Scripts Flyway
│
├── test/ # Testes automatizados
│
├── Dockerfile # Containerização
├── pom.xml # Dependências Maven
└── README.md
- Controller - Recebe requisições HTTP e delega para os services
- Service - Contém a lógica de negócio da aplicação
- Repository - Interface de manipulação de dados
- Domain - Entidades e regras de domínio
- Infra - Configurações de segurança e tratamento de exceções
- ☕ Java 17 ou superior
- 🐳 Docker
- 📦 Maven 3.6+
- 🎲 MySQL
git clone https://github.com/seu-usuario/eyegen-backend.git
cd eyegen-backend# Banco de Dados
DB_PASSWORD: com_sua_senha
# JWT
JWT_SECRET: sua_chave_secreta_aqui_minimo_256_bitsa)Crie um banco de dados no MySQL
eyegen_dbb) Configure o application.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/eyegen_db
spring.datasource.username=root
spring.datasource.password=${DB_PASSWORD}
spring.jpa.hibernate.ddl-auto=validate
spring.jpa.show-sql=true
api.security.token.secret=${JWT_SECRET}O sistema utiliza JWT (JSON Web Tokens) para autenticação:
- Usuário faz login com email e senha
- Sistema valida credenciais e gera um token JWT
- Token é retornado ao cliente
- Cliente envia o token no header
Authorizationem requisições subsequentes - Sistema valida o token antes de processar a requisição
- ✅ Endpoints Públicos:
/usuarios/cadastro,/usuarios/login - 🔒 Endpoints Protegidos: Todos os demais (requerem token JWT válido)
- Senhas nunca armazenadas em texto plano (BCrypt)
- Tokens com expiração configurável
- CORS configurado para origens específicas
- Validação de entrada em todos os endpoints
- Tratamento centralizado de exceções
O projeto utiliza Flyway para versionamento do banco de dados. As migrações são executadas automaticamente no startup da aplicação.
Localização: src/main/resources/db/migration/
Exemplo de nomenclatura:
V1__criar_tabela_usuarios.sqlV2__criar_tabela_produtos.sqlV3__criar_tabela_pedidos.sql
Contribuições são sempre bem-vindas! Para contribuir:
- Faça um fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add: nova funcionalidade incrível') - 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.
Desenvolvido pelo EyeGen. Inteligência que Guia os Seus Passos 🕶️