Livros — Casos de Borda
Gerado pelo Writer (Reversa) em 2026-05-11
doc_level: detalhado
EC-01 — LivrosSelect.allIds aponta para slice errado
Descrição: Havia bug em que LivrosSelect.allIds retornava it.repertorios.ids em vez de it.livros.ids, causando exibição de IDs de repertório no lugar dos livros na LivrosScreen.
Comportamento atual: Corrigido no legado (it.livros.ids). O caso permanece documentado para rastreabilidade histórica. 🟢
Comportamento esperado: allIds deve apontar para livrosAdapter.getSelectors().selectIds(state.livros).
Rastreabilidade: src/store/Livros/Livros.selector.ts — static readonly allIds = (it: RootState) => it.livros.ids
EC-02 — carregarLivro com ID inexistente
Descrição: LivrosAction.carregarLivro chama LivrosRepository.findById(id). Se o ID não existir no banco, findById retorna undefined e o thunk chama rejectWithValue('not found').
Comportamento esperado: A UI deve exibir tela de erro ou navegar de volta. 🟡 Não foi identificado tratamento de rejected no slice para carregarLivro.
Risco: 🟡 O slice só tem handler fulfilled para carregarLivro; estado FALHOU não é atualizado.
Rastreabilidade: src/store/Livros/Livros.reducer.ts + src/store/Livros/Livros.action.ts
EC-03 — Livro sem site exibe botão "Mais informações" desabilitado
Descrição: LivroDetalhesScreen verifica hasSite = livro?.site !== null && livro?.site !== undefined. Quando site é undefined (retornado pelo repositório quando o campo está nulo no banco), o botão fica desabilitado.
Comportamento esperado: Botão desabilitado sem erro. 🟢
Rastreabilidade: src/view/screen/LivroDetalhesScreen.tsx — hasSite + disabled={!hasSite}
EC-04 — Livro ainda não carregado ao navegar para LivroScreen
Descrição: O usuário navega diretamente para AppStack.Livro com um idEdicaoLivro. Se o livro não estiver no store (cache frio), o useEffect dispara carregarLivro(idLivro). Durante o carregamento, livro é undefined e LivroHeader não é renderizado.
Comportamento esperado: Header fica oculto até o livro carregar; BuscaMusicasView recebe livro={undefined} — comportamento dessa view com undefined deve ser validado. 🟡
Rastreabilidade: src/view/screen/LivroScreen.tsx — {livro && <LivroHeader ... />}
EC-05 — Condição de skip no thunk carregarLivro
Descrição: carregarLivro usa condition para evitar re-fetch: só executa se LivrosSelect.byId(idLivro)(getState()) === undefined. Se o livro já está no store, o thunk é pulado silenciosamente.
Comportamento esperado: Correto para evitar chamadas desnecessárias. Porém, se os dados do livro no store estiverem desatualizados (ex.: após download de nova obra), não há mecanismo de invalidação de cache. 🟡
Rastreabilidade: src/store/Livros/Livros.action.ts — condition em carregarLivro
EC-06 — Botão "Seções" desabilitado na LivroScreen
Descrição: O botão de Seções está com disabled={true} hardcoded — funcionalidade planejada mas não implementada.
Comportamento esperado: Usuário não consegue navegar para seções do livro. Botão visível mas inativo. 🟢
Rastreabilidade: src/view/screen/LivroScreen.tsx — <Pilula disabled={true} ...>Seções</Pilula>