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
.dbpara o cache do dispositivo - Importar músicas, livros e índices via ATTACH/DETACH
- Registrar o
ExemplarBibliotecano 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 |
🟢 |