Skip to content

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.tsstatic 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.tsxhasSite + 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.tscondition 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>