Skip to content

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, editora criadas
  • [ ] Tabela musica_busca populada como virtual FTS5 com trigger de sync a musica
  • [ ] Redux store configurado com createEntityAdapter para Musicas
  • [ ] MusicasFavoritasRepository disponível (depende do módulo repertorios)
  • [ ] Constante de configuração adaptativa (MusicaConfiguration) disponível

Tarefas

  • [ ] T-01 — Implementar getDetalhesTermoBusca: classificar termo como indice, texto ou vazio
  • Origem no legado: src/repository/musicas/MusicasRepository.ts — função getDetalhesTermoBusca
  • 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.tsgetDetalhesTermoBusca (branch texto)
  • Critério de pronto: "Avé María" normaliza para "ave* maria*"; "foi" → "foi*"
  • Confiança: 🟢

  • [ ] T-03 — Implementar MusicasRepository.findAllBy com as 3 estratégias (semTermo, porIndice, porTermo)

  • Origem no legado: src/repository/musicas/MusicasRepository.tsfindAllBy + BuscaStrategies
  • Critério de pronto: cada estratégia gera SQL correto; paginação LIMIT n+1 retorna hasNextPage corretamente
  • Confiança: 🟢

  • [ ] T-04 — Implementar filtro adicional por id_edicao_livro e 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.findById com JOIN completo de índices

  • Origem no legado: src/repository/musicas/MusicasRepository.tsfindById
  • Critério de pronto: retorna InformacoesDetalhadasMusica com indices[] populados; música sem livro retorna indices: []
  • Confiança: 🟢

  • [ ] T-06 — Implementar Redux thunk buscarMusicas e 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; hasNextPage exposto no estado
  • Confiança: 🟢

  • [ ] T-07 — Implementar Redux thunk carregarMusica com verificação de cache no EntityAdapter

  • Origem no legado: src/store/Musicas/Musicas.action.tscarregarMusica
  • Critério de pronto: id já presente no store não dispara nova query; id ausente dispara findById e faz upsertOne
  • Confiança: 🟢

  • [ ] T-08 — Implementar Redux thunk setFavorita

  • Origem no legado: src/store/Musicas/Musicas.action.tssetFavorita
  • 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.tsmarcarMusicaComoVisualizada
  • 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 de react-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 via Linking

  • Origem no legado: src/service/MusicaService.tsrelatarErro
  • Critério de pronto: URL gerada contém id_musica, titulo e inicio_da_letra como 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 — campo midias.YouTubes; commit feat(youtube): support multiple youtube ids
  • Critério de pronto: músicas com múltiplos YouTubes exibem seletor; campo YouTube deprecated é 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=true quando há mais resultados, false na ú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

  1. T-01, T-02 — normalização e classificação do termo (base da busca)
  2. T-03, T-04 — queries SQLite completas (dependem de T-01/T-02)
  3. T-05 — findById (independente, pode ser paralelo a T-03)
  4. T-06, T-07 — thunks Redux (dependem de T-03 e T-05)
  5. T-08, T-09 — thunks de favoritar/visualizar (dependem de MusicasFavoritasRepository do módulo repertorios)
  6. T-10 — configuração adaptativa (pode ser feito a qualquer momento)
  7. T-11 — Keep Awake (depende da tela de letra estar montada)
  8. T-12 — relatarErro (independente)
  9. T-13 — YouTube múltiplo (depende de T-05 e do módulo youtube-player)

Lacunas Pendentes (🔴)

  • Comportamento exato ao tentar carregar id_musica invá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