Projeto de estudos: Mini e-commerce com Spring Boot (backend) + Flutter (mobile)
E-commerce completo focado em eletrônicos e peças, desenvolvido com as melhores práticas de mercado para fins educacionais.
- API REST robusta com Spring Boot
- Autenticação JWT
- Push notifications via Firebase
- Observabilidade completa (OpenTelemetry + Prometheus + Grafana + Elasticsearch)
- Clean Architecture
- Testes automatizados
- CI/CD básico
- Framework: Spring Boot 4.x
- Linguagem: Java 21+
- Database: PostgreSQL 17+
- Migrations: Flyway
- Documentação: Swagger/OpenAPI
- Notificações: Firebase Cloud Messaging
- Segurança: Spring Security + JWT
- Observability: OpenTelemetry + Micrometer + Prometheus
- Flutter 3.x
- Dart
- Provider/Bloc para state management
-
✅ Catálogo de Produtos
- Listagem com filtros (categoria, marca, preço)
- Busca por nome
- Paginação
- Detalhes do produto
-
✅ Autenticação e Usuários
- Cadastro de usuário
- Login JWT
- Perfil do usuário
- Gerenciamento de endereços
-
✅ Carrinho de Compras
- Adicionar/remover produtos
- Alterar quantidades
- Persistência no banco
-
✅ Pedidos
- Criar pedido a partir do carrinho
- Acompanhar status (criado, pago, enviado, entregue)
- Histórico de pedidos
-
✅ Notificações Push
- Registro de tokens FCM
- Notificação automática em mudanças de status
- OpenTelemetry (traces distribuídos)
- Métricas com Prometheus
- Dashboards Grafana
- Logs estruturados (JSON)
Detalhes e passo a passo: docs/OBSERVABILITY_STACK.md.
- Spring Boot 4.x
- Spring Data JPA - Persistência
- Spring Security - Autenticação/Autorização
- Spring Validation - Validações
- Spring Actuator - Health checks e métricas
- PostgreSQL - Banco principal
- Flyway - Migrations
- Redis - Cache
- MinIO - Object Storage
- SpringDoc OpenAPI 3 - Swagger UI
- Firebase Admin SDK - Push notifications
- OpenTelemetry + Micrometer
- Prometheus - Métricas
- Logstash Logback Encoder - Logs JSON
- JUnit 5
- Mockito
- Spring Boot Test
- Docker / Docker Compose
- Maven - Build
- GitHub Actions - CI
- Qodana - Code Quality
store-backend/
├── docs/ # Documentação
│ ├── CATALOG_MODULE_IMPLEMENTED.md
│ ├── DEEP_LINKS_IMPLEMENTATION.md
│ ├── FIREBASE_FCM_INTEGRATION.md
│ ├── GITHUB_ACTIONS.md
│ ├── MINIO_INTEGRATION.md
│ ├── OBSERVABILITY_STACK.md
│ ├── REDIS_INTEGRATION.md
│ └── checklist.md
├── src/
│ ├── main/
│ │ ├── java/br/dev/fca/store/
│ │ │ ├── config/ # Configurações (Security, Swagger)
│ │ │ ├── domain/ # Entidades, Enums
│ │ │ ├── application/ # Services, DTOs, Use Cases
│ │ │ ├── infra/ # Repositories, Integrações
│ │ │ └── web/ # Controllers, Exception Handlers
│ │ └── resources/
│ │ ├── db/migration/ # Scripts Flyway
│ │ └── application.properties
│ └── test/ # Testes
├── observability/ # Stack de observabilidade (OTel/Tempo/etc)
├── docker-compose.yml # API (depende de serviços externos)
├── Dockerfile # Imagem do backend
└── pom.xml # Dependencies
- Java 21+ (Download)
- Maven 3.8+ (ou use o wrapper
./mvnw) - Docker e Docker Compose (Instalar)
- PostgreSQL 17+ (ou use Docker para subir o banco)
git clone https://github.com/FelipeCostaAraujo/store-backend.git
cd store-backendO backend depende de PostgreSQL, Redis e MinIO.
Você pode usar serviços locais ou Docker e ajustar as variáveis com base no .env.example.
Use o .env.example como base.
Se rodar via Docker Compose, o .env é carregado automaticamente.
# Database
DB_HOST=localhost
DB_PORT=5432
DB_NAME=storedb
DB_USER=storeuser
DB_PASSWORD=storepass
# Redis
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=
# MinIO
MINIO_URL=http://localhost:9000
MINIO_ACCESS_KEY=minioadmin
MINIO_SECRET_KEY=minioadmin
MINIO_BUCKET=store
# JWT
JWT_SECRET=change-me-in-production-must-be-at-least-256-bits-long
JWT_EXPIRATION=86400
JWT_REFRESH_EXPIRATION=2592000
# Firebase (após configurar)
FIREBASE_CREDENTIALS_PATH=/path/to/serviceAccountKey.json
# App
PORT=3000./mvnw clean install./mvnw flyway:migrate./mvnw spring-boot:runA API estará disponível em: http://localhost:3000 (ou a porta definida em PORT)
Abra no navegador: http://localhost:3000/swagger-ui.html
./mvnw test./mvnw verify./mvnw test jacoco:reportRelatório em: target/site/jacoco/index.html
docker build -t store-backend:latest .docker compose up --buildServiço disponível:
- API: http://localhost:6173 (padrão do
docker-compose.yml)
Obs.: a API espera PostgreSQL/Redis/MinIO fora do Compose (por padrão em host.docker.internal).
Acesse o Swagger após subir a aplicação.
docs/CATALOG_MODULE_IMPLEMENTED.md- Catálogodocs/DEEP_LINKS_IMPLEMENTATION.md- Deep linksdocs/FIREBASE_FCM_INTEGRATION.md- FCMdocs/MINIO_INTEGRATION.md- Upload de imagensdocs/REDIS_INTEGRATION.md- Cachedocs/OBSERVABILITY_STACK.md- Observabilidadedocs/GITHUB_ACTIONS.md- CI/Qodanadocs/checklist.md- Backlog e próximos passos
curl -X POST http://localhost:3000/api/auth/register \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com",
"password": "Strong@Pass123",
"name": "João Silva",
"cpf": "123.456.789-00",
"phone": "(11) 98765-4321"
}'curl -X POST http://localhost:3000/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com",
"password": "Strong@Pass123"
}'curl http://localhost:3000/api/products?page=0&size=20- Crie um projeto no Firebase Console
- Ative o Cloud Messaging
- Baixe o arquivo
serviceAccountKey.json(Configurações > Service accounts) - Guarde o arquivo em um caminho seguro (não versionado)
- Configure a variável de ambiente
FIREBASE_CREDENTIALS_PATH
users- Usuários do sistemacategories- Categorias de produtosbrands- Marcasproducts- Produtosproduct_images- Imagens dos produtosaddresses- Endereços de entregacarts- Carrinhos de comprascart_items- Items do carrinhoorders- Pedidosorder_items- Items do pedidodevice_tokens- Tokens FCM para push
Este é um projeto de estudos, mas contribuições são bem-vindas!
- Fork o projeto
- Crie uma branch (
git checkout -b feature/nova-funcionalidade) - Commit suas mudanças (
git commit -m 'feat: adiciona nova funcionalidade') - Push para a branch (
git push origin feature/nova-funcionalidade) - Abra um Pull Request
Seguimos o Conventional Commits:
feat:nova funcionalidadefix:correção de bugdocs:documentaçãotest:testesrefactor:refatoraçãochore:tarefas gerais
Veja docs/checklist.md para itens planejados e pendências.
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Felipe Araújo
- GitHub: @FelipeCostaAraujo
Para dúvidas ou sugestões, abra uma issue.
⭐ Se este projeto te ajudou nos estudos, deixe uma estrela!