Skip to content

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 🟢