💾 Cap 13: Meus Jogos Favoritos (Room DB)

🎯 Objetivo da Aula: Ao final desta aula, você saberá criar um banco de dados interno no celular usando o Room. Você aprenderá a salvar informações de forma permanente (persistência), para que seus jogos favoritos não sumam quando o app fechar.


🏢 O Cenário Prático (Seu Desafio): Você tem muitos jogos e quer criar um catálogo pessoal. O desafio é criar o Vault Gamer: um banco de dados onde você pode salvar o nome do jogo, o console e a sua nota. Mesmo se você desligar o celular, sua lista continuará lá!


🧠 Fundamentos: A Teoria Traduzida

📖 Dicionário do Programador

  • Entity (Entidade): É a “Tabela” do banco. Cada linha da tabela é um jogo. No Kotlin, é uma data class.
  • DAO (Data Access Object): É o “Controle Remoto” do banco. É onde você cria os botões: “Salvar”, “Deletar” ou “Ver Tudo”.
  • Primary Key (Chave Primária): É o CPF de cada registro. Cada jogo terá um número único para o banco não se confundir.

🎨 O Padrão Room

Organize seu código na pasta data/local/:

  1. model/ Coloque sua @Entity aqui.
  2. dao/ Coloque sua @Dao aqui.
graph TD
    A[Seu App] --> B(DAO: O Gerente)
    B -->|Escreve/Lê| C[(Banco Room: O Arquivo)]

📖 Exemplo Passo a Passo: Criando o “Save Game”

  1. Defina a Tabela (Entity):

    @Entity(tableName = "jogos")
    data class JogoEntity(
        @PrimaryKey(autoGenerate = true) val id: Int = 0,
        val titulo: String,
        val plataforma: String
    )
  2. Crie o Controle (DAO):

    @Dao
    interface JogoDao {
        @Insert
        suspend fun adicionar(jogo: JogoEntity)
     
        @Query("SELECT * FROM jogos")
        suspend fun listarTodos(): List<JogoEntity>
    }

🛠️ Prática Obrigatória 1: Crie uma Entity chamada PersonagemEntity. Ela deve ter um id (PrimaryKey), o nome e o level.


🛠️ Prática Obrigatória 2: Crie o DAO para salvar heróis. Ele deve ter uma função para salvar e uma função para buscarPorNome.


🔑 Gabarito Passo a Passo:

// 1. A Tabela
@Entity(tableName = "personagens")
data class PersonagemEntity(
    @PrimaryKey(autoGenerate = true) val id: Int = 0,
    val nome: String,
    val level: Int
)
 
// 2. O Controle
@Dao
interface PersonagemDao {
    @Insert
    suspend fun salvar(p: PersonagemEntity)
 
    @Query("SELECT * FROM personagens WHERE nome = :nome")
    suspend fun buscarPorNome(nome: String): PersonagemEntity
}

📤 Instruções de Entrega (Microsoft Teams):

  1. Envie o código da sua Entity e do seu DAO.
  2. Nomeie como: Gamer_SeuNome_Cap13.kt.
  3. Submeta no canal de tarefas.

Capitulo Anterior | Proximo Capitulo