Músicas — Tarefas de Implementação
Gerado pelo Writer (Reversa) em 2026-05-11
doc_level: detalhado
Pré-requisitos
- [ ] Schema SQLite com tabelas
musica,musica_busca(FTS5),cantico_livro,edicao_livro,livro,editoracriadas - [ ] Tabela
musica_buscapopulada como virtual FTS5 com trigger de sync amusica - [ ] Redux store configurado com
createEntityAdapterparaMusicas - [ ]
MusicasFavoritasRepositorydisponível (depende do módulorepertorios) - [ ] Constante de configuração adaptativa (
MusicaConfiguration) disponível
Tarefas
- [ ] T-01 — Implementar
getDetalhesTermoBusca: classificar termo comoindice,textoouvazio - Origem no legado:
src/repository/musicas/MusicasRepository.ts— funçãogetDetalhesTermoBusca - Critério de pronto: dado "23" retorna
{tipo:'indice', valor:23}; dado "ave maria" retorna{tipo:'texto', valor:'ave* maria*'}; dado "" retorna{tipo:'vazio'} -
Confiança: 🟢
-
[ ] T-02 — Implementar normalização FTS5: NFKD → remove não-alfanumérico → split → adiciona
*→ join → remove** - Origem no legado:
src/repository/musicas/MusicasRepository.ts—getDetalhesTermoBusca(branch texto) - Critério de pronto: "Avé María" normaliza para
"ave* maria*"; "foi" →"foi*" -
Confiança: 🟢
-
[ ] T-03 — Implementar
MusicasRepository.findAllBycom as 3 estratégias (semTermo,porIndice,porTermo) - Origem no legado:
src/repository/musicas/MusicasRepository.ts—findAllBy+BuscaStrategies - Critério de pronto: cada estratégia gera SQL correto; paginação
LIMIT n+1retornahasNextPagecorretamente -
Confiança: 🟢
-
[ ] T-04 — Implementar filtro adicional por
id_edicao_livroe por rótulo nas 3 estratégias - Origem no legado:
src/repository/musicas/MusicasRepository.ts— cláusulas WHERE condicionais - Critério de pronto: filtrar por livro "CE5" retorna apenas músicas daquele livro; filtrar por "Entrada" retorna somente músicas com esse rótulo
-
Confiança: 🟢
-
[ ] T-05 — Implementar
MusicasRepository.findByIdcom JOIN completo de índices - Origem no legado:
src/repository/musicas/MusicasRepository.ts—findById - Critério de pronto: retorna
InformacoesDetalhadasMusicacomindices[]populados; música sem livro retornaindices: [] -
Confiança: 🟢
-
[ ] T-06 — Implementar Redux thunk
buscarMusicase integração com store (lista paginada) - Origem no legado:
src/store/Musicas/Musicas.action.ts - Critério de pronto: dispatch retorna lista; segunda página acumula resultados;
hasNextPageexposto no estado -
Confiança: 🟢
-
[ ] T-07 — Implementar Redux thunk
carregarMusicacom verificação de cache no EntityAdapter - Origem no legado:
src/store/Musicas/Musicas.action.ts—carregarMusica - Critério de pronto: id já presente no store não dispara nova query; id ausente dispara
findByIde fazupsertOne -
Confiança: 🟢
-
[ ] T-08 — Implementar Redux thunk
setFavorita - Origem no legado:
src/store/Musicas/Musicas.action.ts—setFavorita - Critério de pronto: persiste no SQLite via
MusicasFavoritasRepository; dispara métrica; exibe toast de erro em falha -
Confiança: 🟢
-
[ ] T-09 — Implementar Redux thunk
marcarMusicaComoVisualizada(side effect assíncrono) - Origem no legado:
src/store/Musicas/Musicas.action.ts—marcarMusicaComoVisualizada - Critério de pronto: não bloqueia carregamento da tela; adiciona ao repertório id=2; dispara métrica
-
Confiança: 🟢
-
[ ] T-10 — Implementar configuração adaptativa
MusicaConfiguration - Origem no legado:
src/repository/musicas/MusicaConfiguration.ts - Critério de pronto: phone →
TOTAL_CARACTERES=100, TOTAL_TOKENS=12; tablet →250, 24 -
Confiança: 🟢
-
[ ] T-11 — Integrar Keep Awake na tela de letra (ativar ao montar, desativar ao desmontar)
- Origem no legado: múltiplos commits
fix: keep awake+ uso dereact-native-keep-awake - Critério de pronto: tela permanece ativa durante leitura; desativada ao navegar para outra tela
-
Confiança: 🟢
-
[ ] T-12 — Implementar
MusicaService.relatarErro: montar URL Airtable com parâmetros pré-preenchidos e abrir viaLinking - Origem no legado:
src/service/MusicaService.ts—relatarErro - Critério de pronto: URL gerada contém
id_musica,tituloeinicio_da_letracomo query params; abre no browser -
Confiança: 🟢
-
[ ] T-13 — Implementar exibição de
YouTubes[]com seletor de vídeo (múltiplos YouTube) - Origem no legado:
src/model/Musica.ts— campomidias.YouTubes; commitfeat(youtube): support multiple youtube ids - Critério de pronto: músicas com múltiplos
YouTubesexibem seletor; campoYouTubedeprecated é lido como fallback - Confiança: 🟢
Tarefas de Teste
- [ ] TT-01 — Teste de
getDetalhesTermoBusca: verificar os 3 tipos de classificação (índice, texto, vazio) - [ ] TT-02 — Teste de normalização FTS5: acentos, caracteres especiais, múltiplas palavras
- [ ] TT-03 — Teste de paginação
LIMIT n+1:hasNextPage=truequando há mais resultados,falsena última página - [ ] TT-04 — Teste de
carregarMusica: cache hit não dispara query; cache miss dispara e faz upsert - [ ] TT-05 — Teste de
setFavorita: persistência confirmada; toast de erro em falha de banco - [ ] TT-06 — Teste de
relatarErro: URL gerada contém todos os parâmetros esperados
Ordem Sugerida
- T-01, T-02 — normalização e classificação do termo (base da busca)
- T-03, T-04 — queries SQLite completas (dependem de T-01/T-02)
- T-05 — findById (independente, pode ser paralelo a T-03)
- T-06, T-07 — thunks Redux (dependem de T-03 e T-05)
- T-08, T-09 — thunks de favoritar/visualizar (dependem de
MusicasFavoritasRepositorydo módulo repertorios) - T-10 — configuração adaptativa (pode ser feito a qualquer momento)
- T-11 — Keep Awake (depende da tela de letra estar montada)
- T-12 — relatarErro (independente)
- T-13 — YouTube múltiplo (depende de T-05 e do módulo youtube-player)
Lacunas Pendentes (🔴)
- Comportamento exato ao tentar carregar
id_musicainválido — requer validação com equipe - Keep Awake: confirmar que
deactivateKeepAwakeé chamado em todos os cenários de saída da tela (back, deep link, background) - Sanitização especial da letra de Salmo (RN-06) — localizar ponto exato de aplicação no código