Skip to content

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; campo YouTube deprecated é 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 🟢