📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Especialização em Backend com Java e Spring Boot. Recomendado revisar antes de começar.
🎮 Biblioteca de Jogos 03 — Categorias, Tema e Deploy
Trilha de Aprendizado — Projeto 3 de 4
- 01: CRUD básico de jogos · H2 · Bootstrap 5
- 02: Refatoração SOLID/DRY — camada de Service, DTOs, Bean Validation
- ➡️ 03 (este): Categorias, tema claro/escuro, deploy Render + Neon
- 04: Levantamento de Requisitos · Backlog & Sprints · Git Flow · testes · ADRs
🎓 Nível profissional simulado: Pleno. O modelo de dados deixa de ser uma entidade solta e ganha um relacionamento real (
Jogo→Categoria), com validação de entrada (Bean Validation), paginação (pensando em uma biblioteca com centenas de jogos, não 5) e uma camada visual completa (tema claro/escuro persistente). Você também entrega isso publicamente — GitHub + deploy real.`
Catálogo completo de jogos com categorização, filtro, paginação e tema claro/escuro — o mesmo nível de detalhe de um catálogo de produtos real.`
Categoriaid, nome, descricao, iconeUrl, dataCriacao, dataAtualizacao, ativo.
Jogoid, titulo, autor, anoPublicacao, genero, descricao, plataforma, tempoEstimado (horas), dataLancamento, nota (0-10), dificuldade (FACIL/MEDIO/DIFICIL), multiplayer, preco, lojaUrl, urlCapa, finalizado, dataAdicionado, dataFinalizacao, categoria (@ManyToOne).
erDiagram
CATEGORIA ||--o{ JOGO : classifica
CATEGORIA {
Long id PK
String nome
boolean ativo
}
JOGO {
Long id PK
String titulo
Double nota
Dificuldade dificuldade
boolean finalizado
Long categoria_id FK
}
💡 Validação real, não só
requiredno HTML:titulo(@NotBlank),categoria(@NotNull),nota(@DecimalMin/@DecimalMaxentre 0 e 10) epreco(@Positive) são validados noJogodiretamente com Bean Validation — uma requisição direta (Postman/curl) que tentasse burlar o formulário HTML ainda seria barrada pelo@Validno controller.`
JogoController)| Rota | Ação |
|---|---|
GET / |
Lista paginada (8 por página), com filtro opcional por categoria |
POST /jogos |
Cria um jogo (marca dataFinalizacao automaticamente se finalizado=true e a data não foi informada) |
POST /jogos/{id}/apagar |
Remove um jogo |
A paginação usa Pageable/Page<Jogo> do Spring Data — o mesmo padrão usado em Controle de Gastos 03.`
CSS custom properties (--bg, --texto, --card-bg) redefinidas via [data-theme="dark"], alternadas por um botão que grava a preferência em localStorage — a escolha do usuário persiste entre visitas, sem precisar de cookie nem de estado no servidor.`
cd bibliotecajogos
./mvnw spring-boot:run
SPRING_PROFILES_ACTIVE=prod, DB_URL, DB_USERNAME, DB_PASSWORD.💡 Atenção com Render (free tier) + Neon: ambos hibernam por inatividade (Render ~15min, Neon ~5min) — o primeiro acesso após um tempo parado pode demorar até 50s. Configure um
connectionTimeoutgeneroso no HikariCP (ex.: 30000ms) e mantenha?sslmode=requirena URL do banco. Veja o guia completo em Controle de Gastos 03 (seção “Recomendações Importantes para Render & Neon”).
—`
No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:
cd javaweb_jogos_03_paging
./mvnw spring-boot:run
./mvnw test
[!TIP] Dica para execução a partir da raiz do repositório: Se você abriu o repositório completo no VS Code, basta navegar até a pasta antes de executar: cd proj_aplicacoes_full_stack/projetos/javaweb_jogos_03_paging