Skip to content

Visualizar Livro (Músicas do Livro)

Gerado pelo Writer (Reversa) em 2026-05-11 doc_level: detalhado | Módulo pai: livros

Visão Geral

Caso de uso que exibe as músicas de uma edição de livro específica, com header mostrando título e informações do livro, e acesso rápido à busca filtrada por este livro.

Responsabilidades

  • Carregar a EdicaoLivro selecionada no store (caso não esteja em cache)
  • Exibir header com título, edição, editora e atalhos de ação
  • Renderizar BuscaMusicasView pré-filtrada pelo idEdicaoLivro
  • Navegar para LivroDetalhesScreen ao pressionar "Informações"

Regras de Negócio

  • O livro é carregado individualmente com guard de idempotência: só faz fetch se não estiver no store 🟢
  • O header só é renderizado quando livro está disponível no store 🟢
  • O botão "Seções" está desabilitado (funcionalidade não implementada) 🟢
  • BuscaMusicasView recebe livro como prop e aplica o filtro automaticamente 🟡

Requisitos Funcionais

ID Requisito Prioridade Critério de Aceite
RF-01 Exibir título, edição e editora do livro no header Must Header exibe dados corretos do livro após carregamento
RF-02 Exibir lista de músicas filtradas pelo livro Must BuscaMusicasView exibe apenas músicas deste livro
RF-03 Navegar para LivroDetalhesScreen ao pressionar "Informações" Should Botão "Informações" navega corretamente com idEdicaoLivro
RF-04 Não recarregar livro se já está no store Should Thunk carregarLivro usa condition para evitar re-fetch
RF-05 Botão "Seções" visível mas desabilitado Could Botão exibido com disabled={true} sem ação

Requisitos Não Funcionais

Tipo Requisito inferido Evidência no código Confiança
Performance Guard de idempotência no thunk evita chamadas redundantes Livros.action.tscondition em carregarLivro 🟢
Usabilidade Header ausente durante carregamento (sem skeleton/loader) LivroScreen.tsx{livro && <LivroHeader>} 🟡

Critérios de Aceitação

Dado que o usuário navega para a tela de um livro cujo ID não está no store
Quando a tela monta
Então o thunk carregarLivro é disparado e o header aparece após o fetch

Dado que o livro já está no store
Quando a tela monta novamente
Então o header é renderizado imediatamente sem novo fetch ao banco

Dado que o usuário pressiona "Informações"
Quando o botão é acionado
Então a navegação vai para LivroDetalhesScreen com o idEdicaoLivro correto

Dado que o usuário pressiona "Seções"
Quando o botão é acionado
Então nenhuma ação ocorre (botão desabilitado)

Prioridade (MoSCoW)

Requisito MoSCoW Justificativa
Exibir músicas do livro filtradas Must Objetivo principal da tela
Header com dados do livro Must Identificação do contexto para o usuário
Navegação para detalhes do livro Should Complementar; não bloqueia o fluxo principal
Guard de idempotência no carregamento Should Otimização; funciona sem ela mas com re-fetches
Botão Seções desabilitado Won't Funcionalidade futura não implementada

Rastreabilidade de Código

Arquivo Função / Classe Cobertura
src/view/screen/LivroScreen.tsx LivroScreen 🟢
src/view/screen/LivroScreen.tsx LivroHeader 🟢
src/store/Livros/Livros.action.ts LivrosAction.carregarLivro 🟢
src/store/Livros/Livros.selector.ts LivrosSelect.byId 🟢
src/view/fragment/Musicas/BuscaMusicasView.tsx BuscaMusicasView 🟡