Back-end para gerência do site da doceria VZ Dolci
API REST desenvolvida em Java com Spring Boot para gerenciar os produtos da doceria VZ Dolci. O sistema utiliza PostgreSQL (Supabase) como banco de dados e segue os princípios de Clean Architecture.
- Java 17
- Spring Boot 3.2.0
- Spring Web
- Spring Data JPA
- Spring Validation
- PostgreSQL (via Supabase)
- Flyway (migrações de banco de dados)
- Gradle (gerenciamento de dependências)
src/main/java/com/vzdolci/backend/
├── domain/model/ # Modelos de domínio (puro Java)
│ └── Product.java
├── application/
│ ├── exception/ # Exceções customizadas
│ ├── mapper/ # Conversores entre entidade e domínio
│ └── usecase/ # Casos de uso (lógica de negócio)
├── infrastructure/
│ ├── persistence/
│ │ ├── entity/ # Entidades JPA
│ │ └── repository/ # Repositórios Spring Data
│ └── web/
│ ├── controller/ # Controllers REST
│ └── dto/ # DTOs para API
└── VzDolciBackendApplication.java
- Crie um projeto no Supabase
- Obtenha as credenciais de conexão em Project Settings → Database
- Configure as variáveis de ambiente (veja seção abaixo)
A tabela products é criada automaticamente pelo Flyway na primeira execução:
id: BIGSERIAL (chave primária)name: VARCHAR(150)description: TEXTprice_cents: INTEGER (preço em centavos)ingredients: TEXTstory: TEXTemoji: VARCHAR(16)slug: VARCHAR(160) (único)is_active: BOOLEANcreated_at: TIMESTAMPTZupdated_at: TIMESTAMPTZ (atualizado automaticamente via trigger)
SUPABASE_HOST=db.xxxxxx.supabase.co
SUPABASE_PORT=5432
SUPABASE_DB=postgres
SUPABASE_USER=postgres
SUPABASE_PASSWORD=sua_senha_aquiDB_HOST=localhost
DB_PORT=5432
DB_NAME=vzdolci
DB_USER=postgres
DB_PASSWORD=postgres# Com banco PostgreSQL local
./gradlew bootRun --args='--spring.profiles.active=dev'
# Ou com Docker Compose (se configurado)
docker-compose up -d
./gradlew bootRun --args='--spring.profiles.active=dev'# Definir variáveis de ambiente primeiro
export SUPABASE_HOST=db.xxxxxx.supabase.co
export SUPABASE_PORT=5432
export SUPABASE_DB=postgres
export SUPABASE_USER=postgres
export SUPABASE_PASSWORD=sua_senha
# Executar
./gradlew bootRun --args='--spring.profiles.active=prod'# Compilar e gerar JAR
./gradlew clean build
# Executar JAR
java -jar build/libs/vzdolci-backend-0.0.1-SNAPSHOT.jarhttp://localhost:8080/api/v1
GET /api/v1/productsParâmetros Query:
activeOnly(opcional):trueoufalse(padrão:false)
Resposta:
[
{
"id": 1,
"name": "Panna Cotta Clássica",
"description": "Sobremesa italiana cremosa",
"price": 25.00,
"ingredients": "Creme de leite, açúcar, baunilha",
"story": "Inspirada na tradição piemontesa",
"emoji": "🍮"
}
]GET /api/v1/products/{id}Resposta (200 OK):
{
"id": 1,
"name": "Panna Cotta Clássica",
"description": "Sobremesa italiana cremosa",
"price": 25.00,
"ingredients": "Creme de leite, açúcar, baunilha",
"story": "Inspirada na tradição piemontesa",
"emoji": "🍮"
}Resposta (404 Not Found):
{
"message": "Product not found with id: 99",
"status": 404,
"timestamp": "2024-01-01T12:00:00Z"
}# Executar testes
./gradlew test
# Relatório de testes
./gradlew test --info- CORS: Habilitado para todas as origens (ajustar para produção)
- SSL: Obrigatório para conexões com Supabase
- RLS (Row Level Security): Opcional no Supabase (recomendado se expor diretamente)
- Configurar variáveis de ambiente no servidor
- Build do projeto:
./gradlew clean build - Deploy do JAR gerado em
build/libs/vzdolci-backend-0.0.1-SNAPSHOT.jar
- Railway: Suporte nativo para Spring Boot
- Render: Deploy automático via Git
- Heroku: Com buildpack Java
- AWS Elastic Beanstalk: Para produção escalável
As migrações são gerenciadas pelo Flyway e estão em:
src/main/resources/db/migration/
Para adicionar nova migração:
- Criar arquivo
V{número}__{descrição}.sql - Exemplo:
V2__add_category_table.sql - A migração será aplicada automaticamente no próximo startup
- Adicionar autenticação e autorização (Spring Security + JWT)
- Implementar endpoints de criação/atualização/deleção de produtos
- Adicionar tabela de categorias
- Integração com Supabase Storage para imagens
- Implementar cache (Redis)
- Adicionar paginação nos endpoints de listagem
- Documentação OpenAPI/Swagger
- Implementar busca por texto (nome, descrição, ingredientes)
- Desenvolvido para VZ Dolci
Este projeto está sob a licença GNU General Public License v3.0 - veja o arquivo LICENSE para detalhes.