Skip to content

Arch (Infraestrutura) — Módulo

Gerado pelo Writer (Reversa) em 2026-05-11 doc_level: detalhado

Visão Geral

Infraestrutura central do app: singleton Banco que gerencia o banco SQLite via @op-engineering/op-sqlite, com estratégia por plataforma (iOS/Android/Web), pipeline de migrations automáticas (v8→v15), ATTACH/DETACH seguro e seed inicial de sugestões.

Regras de Negócio

  • Banco é singleton com lazy initialization + promise deduplication (evita abertura paralela) 🟢
  • AssetDatabasePreparator.prepare copia o asset para o local de dados na primeira instalação 🟢
  • Migrations executadas em sequência ao inicializar — PRAGMA user_version controla a versão 🟢
  • Cada migration pode ter SQL + função JS (ex: migração de dados) 🟢
  • ATTACH na web valida alias com regex ^[A-Za-z_][A-Za-z0-9_]*$ e filename ^[A-Za-z0-9._-]+$ 🟢
  • ATTACH no nativo usa instancia.attach() da biblioteca nativa 🟢
  • Após migrations: BibliotecaSugestoesRepertorioRepository.popularSugestoesIniciais() 🟢

Migrations Conhecidas

Versão Descrição
v8 Cria tabelas repertorio e item_repertorio
v9 ADD musica.informacoes
v10 ADD repertorio.slug + data_edicao
v11 ADD musica.rotulos
v12 (não lida)
v13 (sugestao_repertorio — inferido)
v14 (não lida)
v15 Tabela liturgia_cache

Estratégia por Plataforma

Plataforma databasePath cachePath
iOS IOS_LIBRARY_PATH Caches/
Android undefined (padrão op-sqlite) ../cache/
Web undefined (OPFS/IndexedDB) virtual

Rastreabilidade de Código

Arquivo Função / Classe Cobertura
src/arch/persistence/Banco.ts Banco, BancoHooks, WebBancoHooks, MobileBancoHooks 🟢
src/arch/persistence/AssetDatabasePreparator.ts prepare 🟡
src/arch/persistence/MigrationsRepository.ts runMigrations 🟡
src/arch/persistence/platform/PersistencePlatformStrategies.ts createPersistencePlatformStrategy 🟢

Dependências Externas

Dependência Uso
@op-engineering/op-sqlite SQLite engine — iOS/Android/Web
react-native Platform Seleção de estratégia por plataforma