Visualizar Música
Gerado pelo Writer (Reversa) em 2026-05-11 Unit:
musicas/visualizar-musica
Visão Geral
Exibição da letra completa de uma música com enriquecimento de dados (índices nos livros, mídias), ativação do Keep Awake e registro automático no histórico "Visto recentemente".
Responsabilidades
- Carregar a música do banco SQLite (ou do cache Redux) ao entrar na tela
- Exibir letra completa com destaque do termo buscado (via marcadores
||) - Impedir bloqueio de tela enquanto a letra está visível
- Registrar a visualização no repertório "Visto recentemente" (side effect)
- Exibir índices nos livros, links de mídia (YouTube, CifraClub, Partitura) e dados dos contribuidores
Regras de Negócio
- Cache Redux é consultado antes de qualquer query ao banco 🟢
marcarAsVisualizadaé side effect assíncrono — não bloqueia a UI 🟢- Keep Awake é ativado ao montar a tela e deve ser desativado ao desmontar 🟢
- A tela exibe
YouTubes[]como seletor; campoYouTubedeprecated é usado como fallback 🟢 - O campo
informacoes(JSON livre) existe no banco mas não é exibido na UI atual 🟡
Requisitos Funcionais
| ID | Requisito | Prioridade | Critério de Aceite |
| ----- | ---------------------------------------------------------------------- | ---------- | -------------------------------------------------------------------------------- | --- | -------------------------------------- |
| RF-01 | Carregar InformacoesDetalhadasMusica do cache ou do banco | Must | Música já no cache não gera nova query; nova música é carregada do SQLite |
| RF-02 | Exibir letra completa da música | Must | Toda a letra é renderizada sem truncamento |
| RF-03 | Ativar Keep Awake ao exibir a letra | Should | Tela não bloqueia por inatividade enquanto a letra está visível |
| RF-04 | Desativar Keep Awake ao sair da tela | Should | Keep Awake desligado em todos os cenários de saída (back, deep link, background) |
| RF-05 | Registrar visualização no repertório id=2 ("Visto recentemente") | Must | Após carregar, música aparece na lista de "Visto recentemente" |
| RF-06 | Exibir índices nos livros (hinários) onde a música aparece | Should | Lista de IndiceMusica exibida com título, edição e índice |
| RF-07 | Exibir player YouTube se YouTubes[] ou YouTube (fallback) presente | Should | Vídeo abre no player; músicas sem vídeo não exibem o player |
| RF-08 | Exibir link CifraClub se disponível | Could | Botão só aparece quando midias.CifraClub está preenchido |
| RF-09 | Exibir link Partitura se disponível | Could | Botão só aparece quando midias.Partitura está preenchido |
| RF-10 | Exibir destaque do termo buscado na letra (se veio de busca) | Should | Marcadores | | são renderizados com destaque visual |
Critérios de Aceitação
Dado que o usuário tocou em uma música na lista de resultados
Quando a tela de letra abre
Então a letra completa é exibida sem truncamento
Dado que a música foi carregada anteriormente nesta sessão
Quando o usuário navega para a tela de letra desta música
Então nenhuma query ao banco é disparada (cache hit)
Dado que a tela de letra está aberta
Quando o dispositivo fica inativo por 60 segundos
Então a tela não é bloqueada (Keep Awake ativo)
Dado que a tela de letra está aberta
Quando o usuário pressiona o botão Back
Então o Keep Awake é desativado
Dado que a música tem 2 vídeos em YouTubes[]
Quando a tela de letra é exibida
Então um seletor de vídeo com 2 opções é apresentado
Dado que a música não tem nenhum vídeo
Quando a tela de letra é exibida
Então o player YouTube não é exibido
Rastreabilidade de Código
| Arquivo | Função / Classe | Cobertura |
|---|---|---|
src/repository/musicas/MusicasRepository.ts |
findById |
🟢 |
src/store/Musicas/Musicas.action.ts |
carregarMusica, marcarMusicaComoVisualizada |
🟢 |
src/store/Musicas/Musicas.reducer.ts |
EntityAdapter upsertOne |
🟢 |
src/service/MusicaService.ts |
marcarAsVisualizada |
🟢 |