Skip to content

Baixar Obra

Gerado pelo Writer (Reversa) em 2026-05-11 doc_level: detalhado | Módulo pai: biblioteca

Visão Geral

Caso de uso que baixa o arquivo .db de uma obra do servidor remoto, importa seu conteúdo para o banco principal via ATTACH e registra o exemplar instalado.

Responsabilidades

  • Bloquear downloads simultâneos via mutex estático
  • Baixar o arquivo .db para o cache do dispositivo
  • Importar músicas, livros e índices via ATTACH/DETACH
  • Registrar o ExemplarBiblioteca no banco local

Regras de Negócio

  • Apenas uma obra pode ser baixada por vez (downloadEmAndamento) 🟢
  • O DETACH ocorre em finally, mesmo em caso de erro 🟢
  • Exemplar anterior da mesma obra é desativado antes de criar o novo 🟢
  • Apenas músicas com CRC32 diferente são atualizadas (INSERT ON CONFLICT) 🟢

Requisitos Funcionais

ID Requisito Prioridade Critério de Aceite
RF-01 Baixar arquivo .db da obra para cache Must Arquivo disponível em cachePath(id_obra.db) após download
RF-02 Importar músicas via INSERT ON CONFLICT Must Apenas músicas com CRC32 diferente são atualizadas no banco
RF-03 — Importar livros, índices e seções Must edicao_livro, cantico_livro, secao_edicao_livro atualizados
RF-04 Registrar exemplar e desativar o anterior Must Apenas um exemplar ativo = true por obra após importação
RF-05 Bloquear download simultâneo Must Erro lançado se downloadEmAndamento = true

Critérios de Aceitação

Dado que não há download em andamento
Quando o usuário inicia o download de uma obra
Então o arquivo é baixado, importado e o exemplar registrado com sucesso

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

Dado que o download é concluído com sucesso
Quando a importação é feita
Então as músicas da obra aparecem na busca de músicas

Rastreabilidade de Código

Arquivo Função / Classe Cobertura
src/service/ObraService.ts ObraService.baixarObra 🟢
src/repository/BibliotecaRepository.ts BibliotecaRepository.importarObra 🟢
src/store/Biblioteca/Biblioteca.action.ts BibliotecaAction.baixarObra 🟢