Skip to content

Biblioteca

Gerado pelo Writer (Reversa) em 2026-05-11 doc_level: detalhado | Granularidade: híbrida (módulo + casos de uso)

Visão Geral

Módulo responsável por gerenciar o catálogo de obras musicais disponíveis para download, controlar a instalação de músicas no banco de dados local via arquivos SQLite externos (ATTACH/DETACH), e expor links externos de recursos da CNBB (Liturgia Diária, Sugestões de Repertório).

Responsabilidades

  • Listar o catálogo de obras disponíveis via API remota
  • Comparar CRC32 entre obra remota e exemplar local para detectar atualizações
  • Baixar arquivos .db de obras para o cache do dispositivo
  • Importar músicas, livros e índices do banco temporário para o banco principal via ATTACH
  • Registrar o exemplar instalado em exemplar_biblioteca
  • Expor links externos para recursos da CNBB

Regras de Negócio

  • Uma obra só pode ser baixada se não houver outro download em andamento (downloadEmAndamento) 🟢
  • A detecção de obras desatualizadas usa comparação de crc32 entre o catálogo remoto e exemplar_biblioteca.crc32 🟢
  • Obras com disponivel = false são filtradas da listagem antes de exibição ao usuário 🟢
  • A importação usa ATTACH DATABASE para operações atômicas — o DETACH ocorre em bloco finally garantindo limpeza 🟢
  • Músicas são sincronizadas via INSERT ON CONFLICT DO UPDATE baseando-se em crc32 diferente 🟢
  • Ao registrar um exemplar, o exemplar anterior da mesma obra é desativado (ativo = false) antes de criar o novo 🟢
  • Obras desatualizadas (SituacaoItemObra.NAO_ATUALIZADA) são baixadas automaticamente ao fechar o modal 🟢
  • O módulo também importa sugestões de repertório via API separada (/repertorios) 🟢

Requisitos Funcionais

ID Requisito Prioridade Critério de Aceite
RF-01 Listar catálogo de obras com situação de instalação Must Lista exibe obras com status: ATUALIZADA / NAO_BAIXADA / NAO_ATUALIZADA
RF-02 Baixar e importar obra selecionada para o banco local Must Músicas, livros e índices da obra aparecem na busca após importação
RF-03 Bloquear download simultâneo de obras Must Segunda tentativa de download enquanto há download em andamento lança erro
RF-04 Baixar automaticamente obras desatualizadas ao confirmar modal Should Obras com crc32 diferente do remoto são baixadas sem seleção manual
RF-05 Exibir links externos para Liturgia Diária e Sugestões de Repertório Could Cards abrem URLs corretas no browser externo

Requisitos Não Funcionais

Tipo Requisito inferido Evidência no código Confiança
Disponibilidade ATTACH/DETACH em bloco try/finally evita banco corrompido BibliotecaRepository.tsimportarObra 🟢
Segurança CRC32 valida integridade da obra baixada BibliotecaApi.ts — comparação crc32 🟢
Performance Download sequencial com espera de 2s entre obras no batch BibliotecaAction.tsbaixarObras + wait(2000) 🟢

Critérios de Aceitação

Dado que o usuário abre o modal de obras
Quando o catálogo remoto é carregado
Então a lista exibe obras ATUALIZADA, NAO_BAIXADA e NAO_ATUALIZADA com labels corretos

Dado que o usuário seleciona uma obra não baixada e confirma
Quando o download é disparado
Então as músicas da obra aparecem na busca após importação concluída

Dado que já existe um download em andamento
Quando o usuário tenta baixar outra obra simultaneamente
Então um erro é lançado com mensagem "Já existe uma obra sendo baixada no momento"

Dado que uma obra tem crc32 diferente do exemplar local
Quando o usuário fecha o modal de obras
Então a obra desatualizada é baixada automaticamente sem seleção explícita

Prioridade (MoSCoW)

Requisito MoSCoW Justificativa
Listar e baixar obras Must Caminho crítico — sem obras o app não tem músicas
Bloqueio de download simultâneo Must Proteção de integridade do banco local
Download automático de obras desatualizadas Should Mantém catálogo atualizado sem fricção
Links externos CNBB Could Recurso complementar, não bloqueia fluxo principal

Rastreabilidade de Código

Arquivo Função / Classe Cobertura
src/store/Biblioteca/Biblioteca.api.ts BibliotecaApi (RTK Query) 🟢
src/store/Biblioteca/Biblioteca.action.ts BibliotecaAction 🟢
src/service/ObraService.ts ObraService.baixarObra 🟢
src/repository/BibliotecaRepository.ts BibliotecaRepository.importarObra 🟢
src/view/screen/biblioteca/BibliotecaScreen.tsx BibliotecaScreen 🟢
src/view/screen/biblioteca/fragment/SelecaoObrasBibliotecaModal.tsx SelecaoObrasBibliotecaModal 🟢
src/service/BibliotecaService.ts BibliotecaService.abrirLink 🟢