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.ts — condition 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 |
🟡 |