Pular para conteúdo

Visão Geral da Arquitetura

O que é o Spryx Backend?

O Spryx Backend é um monólito modular — uma única aplicação implantável organizada em contextos delimitados (módulos) que impõem separação estrita de responsabilidades, sem a complexidade de microsserviços.

Monólito Modular

O sistema é uma base de código, um banco de dados, múltiplos contextos delimitados.

Cada módulo possui seu domínio:

  • Sem imports diretos entre módulos — módulos se comunicam através de interfaces (Ports) conectadas via injeção de dependência
  • Infraestrutura compartilhada em src/modules/shared/ — banco de dados, Redis, email, storage — mas a lógica de domínio nunca vaza entre módulos
  • Fácil de desenvolver e testar — sem overhead de sistema distribuído, sem service discovery, sem chamadas de rede entre módulos
  • Fácil de extrair — se um módulo precisar escalar independentemente no futuro, pode ser extraído como serviço separado sem alterar sua lógica interna

Isso nos dá o isolamento de microsserviços com a simplicidade de um monólito.

Contexto do Sistema

graph TD
  Tenant["🏢 Tenant\n(Cliente SaaS)"]
  Staff["👤 Staff\n(Time Interno)"]
  Developer["🧑‍💻 Desenvolvedor Externo\n(Integração)"]

  AppAPI["App API\nFastAPI · REST + WebSocket"]
  BackofficeAPI["Backoffice API\nFastAPI · REST"]
  Worker["Celery Worker\nTarefas em Background"]
  PublicAPI["Public API\nFastAPI · REST  ⏳ planejada"]

  DB[("PostgreSQL\nSupabase")]
  Redis[("Redis")]
  OpenAI["OpenAI"]
  Stripe["Stripe"]
  WhatsApp["WhatsApp\nWAHA"]
  S3["S3 Storage"]

  Tenant -->|REST + WebSocket| AppAPI
  Staff -->|REST| BackofficeAPI
  Developer -->|REST · API Key| PublicAPI

  AppAPI --> DB
  BackofficeAPI --> DB
  Worker --> DB
  PublicAPI --> DB

  AppAPI <-->|enqueue / results| Redis
  Worker <-->|dequeue| Redis

  Worker --> OpenAI
  Worker --> S3
  AppAPI --> WhatsApp
  AppAPI --> Stripe
  BackofficeAPI --> Stripe

Módulos

A aplicação é dividida em 9 contextos delimitados, cada um responsável por um domínio distinto:

graph LR
  identity["identity\nUsuários, Tenants, Auth, Papéis"]
  billing["billing\nPlanos, Assinaturas, Entitlements"]
  agent["agent\nAgentes IA, Workflows, Bases de Conhecimento"]
  message["message\nContatos, Canais, Conversas"]
  connections["connections\nOAuth, Cofre de Credenciais"]
  asset["asset\nStorage de Arquivos, Documentos"]
  audit["audit\nLog de Atividades"]
  notification["notification\nNotificações In-app"]
  tenant_idp["tenant_idp\nSSO do Tenant"]

  billing --> identity
  agent --> asset
  agent --> connections
  agent --> billing
  message --> agent
  message --> connections
  tenant_idp --> identity
Módulo Responsabilidade
identity Usuários, tenants, sessões, papéis, permissões, convites
billing Planos, assinaturas, entitlements, contadores de uso, faturas
agent Agentes IA, versões, workflows, bases de conhecimento, RAG, ferramentas
message Contatos, canais (WhatsApp, email), mensagens, conversas
connections Gestão de credenciais OAuth, cofre criptografado
asset Upload/download de arquivos, ciclo de vida dos assets
audit Log imutável de atividades com rastreamento de atores
notification Notificações in-app com níveis de prioridade
tenant_idp Provedor de identidade por tenant (SSO)