ADR-009: CRC32 para Sincronização Incremental de Obras
Status: Implementado Data (estimada): commit
46526b80—feat: auto update musics on application startTipo: ADR Retroativo
Contexto
O catálogo de músicas é distribuído como bancos SQLite embarcados no app (asset) e como obras baixáveis. A API precisa saber quais músicas foram alteradas sem transferir o banco inteiro a cada verificação.
Decisão
Usar CRC32 como checksum de 32 bits para detectar alterações em músicas e obras. A API retorna o crc32 de cada entidade; o app compara com o armazenado localmente e baixa/atualiza apenas o que mudou.
O processo de update automático (BibliotecaService.atualizarMusicas) ocorre na inicialização do app.
Alternativas Consideradas
- MD5 / SHA256 — descartado: mais pesados computacionalmente para verificação de milhar de registros
- Timestamp de modificação — descartado: não detecta edições que revertem para conteúdo idêntico
- Versionamento por número inteiro — insuficiente para detectar qual campo mudou
- ETag HTTP — não disponível no contexto de bancos SQLite locais
Consequências
- 🟢 Atualizações incrementais — usuário recebe correções de letras sem baixar o banco inteiro
- 🟡 CRC32 não é criptograficamente seguro — mas o uso é apenas de integridade de conteúdo, não de segurança
- 🟢 Performance: CRC32 é rápido o suficiente para comparar milhares de registros
- 🟡 Colisões de CRC32 (1 em 2^32) — probabilidade negligenciável para conteúdo litúrgico