C4 — Nível 2: Containers
Gerado pelo Architect (Reversa) em 2026-05-11 Confiança: 🟢 CONFIRMADO | 🟡 INFERIDO | 🔴 LACUNA
Diagrama
C4Container
title Containers — canta-igreja
Person(usuario, "Usuário", "Musicista ou usuário anônimo")
System_Boundary(app, "canta-igreja App") {
Container(ui, "Interface React Native", "TypeScript / React Native 0.84.1 + Unistyles 3", "Telas, fragmentos e componentes. Navegação via React Navigation 7 (Stack + Bottom Tabs + Drawer).")
Container(store, "Estado Global", "Redux Toolkit 2.11.2 + RTK Query", "Slices por domínio (Musicas, Repertorios, Livros, Liturgia, Biblioteca, SugestoesRepertorio, Acesso, UI). RTK Query para APIs REST.")
Container(service, "Camada de Serviço", "TypeScript (Services)", "Orquestra regras de negócio: RepertorioService, ObraService, FolhetoService, CompartilharService, CalendarioLiturgicoService, MusicaService.")
Container(repo, "Camada de Repositório", "TypeScript (Repositories)", "Abstrai acesso a dados: MusicasRepository, RepertoriosRepository, BibliotecaRepository, LiturgiaCacheRepository, ConfiguracoesUsuarioRepository, etc.")
Container(sqlite, "SQLite (cantaIgreja.db)", "op-sqlite 15.2.12 (nativo) / SQLite WASM (web)", "Banco principal. Músicas, livros, repertórios, sugestões e cache de liturgia. FTS5 para busca de texto.")
Container(mmkv, "MMKV Store", "react-native-mmkv ^4.3.1", "Configurações do usuário (fonte, tema, estilo refrão) e dados do usuário logado. Acesso síncrono.")
Container(keychain, "Keychain / localStorage", "react-native-keychain 10.0.0 (nativo) / localStorage (web)", "Credenciais OAuth do usuário. Keychain no nativo, localStorage com fallback em memória no web.")
Container(assets, "Assets SQLite Embarcados", "cantaIgreja.db + repertorios.db", "Bancos somente-leitura distribuídos com o app. Semente inicial de músicas e sugestões de repertório.")
Container(romcal, "romcal (offline)", "romcal ^3.0.0-dev.125 + @romcal/calendar.brazil", "Cálculo offline do calendário litúrgico romano (dias, nomes, cores, ciclos A/B/C). Roda na thread JS.")
}
System_Ext(cantaApi, "canta.app API", "Backend REST")
System_Ext(livreto, "livreto.canta.app", "Gerador de folhetos")
System_Ext(dancrf, "API DANCRF", "Leituras litúrgicas")
System_Ext(youtube, "YouTube", "Vídeos")
System_Ext(google, "Google OAuth", "Autenticação")
Rel(usuario, ui, "Interage", "Touch / Teclado")
Rel(ui, store, "Despacha ações e lê estado", "React-Redux (hooks)")
Rel(store, service, "Chama ao processar thunks", "TypeScript direto")
Rel(store, repo, "Chama ao processar thunks", "TypeScript direto")
Rel(service, repo, "Lê e escreve dados", "TypeScript direto")
Rel(repo, sqlite, "Queries SQL", "op-sqlite / WASM")
Rel(repo, mmkv, "Lê e escreve preferências", "MMKV síncrono")
Rel(repo, keychain, "Armazena e recupera credenciais", "Keychain API")
Rel(repo, assets, "Lê banco embarcado na inicialização", "Cópia para dados do app")
Rel(service, romcal, "Calcula calendário litúrgico", "In-process JS")
Rel(store, cantaApi, "Baixa obras, sincroniza sugestões", "HTTPS REST (RTK Query)")
Rel(service, cantaApi, "Autentica, compartilha repertório", "HTTPS REST + Bearer")
Rel(service, livreto, "Abre folheto do repertório", "HTTPS (URL)")
Rel(store, dancrf, "Busca leituras do dia", "HTTPS REST (RTK Query)")
Rel(ui, youtube, "Reproduz vídeo", "WebView (iframe)")
Rel(service, google, "Autenticação PKCE", "HTTPS OAuth 2.0")
Descrição dos Containers
| Container | Tecnologia | Responsabilidade principal | Confiança |
|---|---|---|---|
| Interface React Native | RN 0.84.1 + Unistyles + RN Navigation | Renderização e navegação. Sem lógica de negócio. | 🟢 |
| Estado Global (Redux) | Redux Toolkit + RTK Query | Slices de domínio, cache de requisições HTTP, eventos de UI | 🟢 |
| Camada de Serviço | TypeScript puro | Regras de negócio, orquestração cross-repositório | 🟢 |
| Camada de Repositório | TypeScript puro | Acesso a SQLite, MMKV e Keychain; isolamento de persistência | 🟢 |
| SQLite (cantaIgreja.db) | op-sqlite / SQLite WASM | Dados principais: músicas, repertórios, sugestões, cache | 🟢 |
| MMKV Store | react-native-mmkv | Configurações UI e usuário logado (acesso síncrono) | 🟢 |
| Keychain / localStorage | react-native-keychain / localStorage | Credenciais OAuth (plataforma-dependente) | 🟢 |
| Assets SQLite Embarcados | Arquivos .db no bundle | Dados iniciais distribuídos com o app | 🟢 |
| romcal (offline) | romcal JS library | Cálculo do calendário litúrgico romano sem internet | 🟢 |