Skip to content

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.tsopenLink 🟡
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 🟡