Ver Detalhes 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 informações completas de uma edição de livro: título, edição, ano, editora, descrição e link para compra. Incentiva o usuário a adquirir o hinário físico.
Responsabilidades
- Carregar o
EdicaoLivro pelo ID (com guard de idempotência)
- Exibir título, edição, ano, editora e descrição completa
- Exibir botão de ação para abrir o site da editora/livro
- Apresentar mensagem de incentivo à aquisição do livro físico
Regras de Negócio
- A mensagem de incentivo à compra é exibida sempre, independentemente do livro 🟢
- O botão "Mais informações" é desabilitado quando o campo
site é null ou undefined 🟢
- O botão abre o link externo usando
openLink (que usa Linking.openURL do React Native) 🟢
- O carregamento usa o mesmo guard de idempotência de
carregarLivro (não re-fetcha se já no store) 🟢
Requisitos Funcionais
| ID |
Requisito |
Prioridade |
Critério de Aceite |
| RF-01 |
Exibir título, edição, ano e editora do livro |
Must |
Dados corretos exibidos após carregamento |
| RF-02 |
Exibir descrição completa do livro (rolável) |
Must |
ScrollView com campo descricao completo visível |
| RF-03 |
Exibir botão "Mais informações" habilitado quando site existe |
Should |
Botão habilitado abre URL no browser externo |
| RF-04 |
Exibir botão desabilitado quando site é nulo |
Should |
Botão com disabled={true} sem ação quando site é undefined |
| RF-05 |
Exibir mensagem de incentivo à aquisição do livro físico |
Could |
Mensagem fixa exibida na tela abaixo da descrição |
Requisitos Não Funcionais
| Tipo |
Requisito inferido |
Evidência no código |
Confiança |
| Segurança |
openLink usa Linking do RN — URL externa não validada |
src/arch/util/linking.ts — openLink |
🟡 |
| Usabilidade |
Tela rolável para descrições longas |
LivroDetalhesScreen.tsx — <ScrollView> |
🟢 |
Critérios de Aceitação
Dado que o usuário acessa os detalhes de um livro com site cadastrado
Quando a tela carrega
Então o botão "Mais informações" está habilitado e abre o link no browser
Dado que o livro não possui site cadastrado
Quando a tela carrega
Então o botão "Mais informações" está desabilitado sem ação
Dado que o livro ainda não está no store
Quando a tela monta
Então o thunk carregarLivro é disparado e os dados aparecem após o fetch
Dado que o livro já está no store
Quando a tela monta
Então os dados são exibidos imediatamente sem novo fetch
Prioridade (MoSCoW)
| Requisito |
MoSCoW |
Justificativa |
| Exibir dados do livro |
Must |
Propósito central da tela |
| Botão de site da editora |
Should |
Funcionalidade de monetização/incentivo |
| Mensagem de incentivo |
Could |
UX de bom comportamento — não bloqueia o fluxo |
| Guard de idempotência no fetch |
Should |
Otimização; funciona sem ela |
Rastreabilidade de Código
| Arquivo |
Função / Classe |
Cobertura |
src/view/screen/LivroDetalhesScreen.tsx |
LivroDetalhesScreen |
🟢 |
src/store/Livros/Livros.action.ts |
LivrosAction.carregarLivro |
🟢 |
src/store/Livros/Livros.selector.ts |
LivrosSelect.byId |
🟢 |
src/arch/util/linking.ts |
openLink |
🟡 |