📚 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

🎓 Nível profissional simulado: Pleno. O modelo de dados deixa de ser uma entidade solta e ganha um relacionamento real (JogoCategoria), 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.`

🎯 Objetivo

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.`

🛠️ Tecnologias

📂 Modelagem dos Dados

Entidade Categoria

id, nome, descricao, iconeUrl, dataCriacao, dataAtualizacao, ativo.

Entidade Jogo

id, 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ó required no HTML: titulo (@NotBlank), categoria (@NotNull), nota (@DecimalMin/@DecimalMax entre 0 e 10) e preco (@Positive) são validados no Jogo diretamente com Bean Validation — uma requisição direta (Postman/curl) que tentasse burlar o formulário HTML ainda seria barrada pelo @Valid no controller.`

📋 Funcionalidades (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.`

🎨 Tema Claro/Escuro

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.`

🏁 Executando o Projeto

cd bibliotecajogos
./mvnw spring-boot:run

🚀 Deploy (Render + Neon)

  1. Publique o repositório no GitHub (público).
  2. Crie um banco PostgreSQL gratuito no Neon.
  3. Crie um Web Service no Render, runtime Docker, com as variáveis 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 connectionTimeout generoso no HikariCP (ex.: 30000ms) e mantenha ?sslmode=require na URL do banco. Veja o guia completo em Controle de Gastos 03 (seção “Recomendações Importantes para Render & Neon”).


Voltar para Projetos

—`

🚀 Como Executar no Laboratório

1. Abra o terminal na pasta deste projeto

No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:

cd javaweb_jogos_03_paging

2. Execute a aplicação e os testes

./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