Pular para conteúdo

Plataforma Haus

Visao tecnica da infraestrutura compartilhada entre todos os projetos.

Autenticacao (OATH)

O OATH e o servico central de autenticacao. Todas as aplicacoes delegam login, registro e validacao de tokens para ele.

Fluxo de autenticacao

sequenceDiagram
    participant U as Usuario
    participant FE as Frontend
    participant BE as Backend
    participant OATH as OATH Service

    U->>FE: Login (email + senha)
    FE->>BE: POST /auth/login
    BE->>OATH: POST /auth/login (provider + application)
    OATH-->>BE: JWT token + refresh token
    BE-->>FE: Token
    FE->>FE: Armazena token

    Note over FE,BE: Requisicoes subsequentes

    FE->>BE: Request + Authorization: Bearer {token}
    BE->>OATH: POST /auth/introspect
    OATH-->>BE: User context (id, email, roles, permissions)
    BE->>BE: AuthFilter valida e injeta UserContext

Service accounts

Cada aplicacao tem uma conta de servico no OATH para comunicacao entre servicos:

Aplicacao Service Account Uso
Herald herald / HERALD987!@# Envio de emails e WhatsApp
Chronos chronos / CHRONOS987!@# Acesso ao Herald e Guild
Hotel hotel-backend / HOTEL-BACKEND987!@# Acesso ao Herald, Guild, etc.
Chronicle chronicle / CHRONICLE987!@# Acesso ao Herald, Guild e Chat
Rune Courier parley / PARLEY987!@# Acesso ao Guild

Autorizacao (Guild)

O Guild gerencia roles e permissoes por aplicacao. Cada aplicacao define seus proprios roles.

Usuario → OATH (quem e) → Guild (o que pode fazer)

Notificacoes (Herald)

Hub unificado para email e WhatsApp:

  • Email — SMTP configuravel por aplicacao (cada app registra seu SMTP)
  • WhatsApp — Via Evolution API, com configs por ownerRef
  • Templates — Mensagens parametrizaveis por trigger type
  • Webhook — Repasse de mensagens recebidas do WhatsApp para a aplicacao

Fluxo WhatsApp

sequenceDiagram
    participant APP as Aplicacao
    participant HERALD as Herald
    participant EVO as Evolution API
    participant WA as WhatsApp

    Note over APP,WA: Envio de mensagem
    APP->>HERALD: POST /whatsapp/send
    HERALD->>EVO: POST /message/sendText
    EVO->>WA: Mensagem enviada

    Note over APP,WA: Recebimento de resposta
    WA->>EVO: Cliente responde
    EVO->>HERALD: Webhook (messages.upsert)
    HERALD->>APP: POST {webhookUrl} (forward)
    APP->>APP: Processa resposta

Pagamentos (CoinKeeper)

Gateway multi-provider com suporte a Stripe e AbacatePay:

  • Cada aplicacao tem um tenantId no CoinKeeper
  • Webhooks de confirmacao de pagamento
  • Suporte a PIX, cartao de credito e boleto

Chat em Tempo Real (Rune Courier)

Servico centralizado de chat para todas as aplicacoes:

  • Conversas — Diretas (1:1) e em grupo
  • WebSocket — Mensagens em tempo real, presenca, indicador de digitacao
  • Multi-tenant — Isolamento duplo (application_id, tenant_id)
  • Redis — Presenca online, typing indicators, cache de unread counts

Uso via SDK

@Inject ChatClientService chatClient;

// Enviar mensagem de sistema
chatClient.sendSystemMessage(tenantId, conversationId, "Reserva confirmada!");

// Criar conversa direta
chatClient.findOrCreateDirect(tenantId, userId, email, name);

// Criar grupo
chatClient.createGroup(tenantId, "Equipe", participants);

Para detalhes completos, veja a documentacao do Rune Courier.

Armazenamento (Vault)

Servico de upload de arquivos baseado em MinIO (S3-compatible):

  • Upload de imagens, PDFs, documentos
  • URLs publicas para assets
  • Suporte a multiplos formatos

SDK Quarkus

O haus-quarkus-sdk fornece componentes reutilizaveis:

  • BaseAuthFilter — Filtro de autenticacao com introspeccao via OATH
  • OathClient / OathClientService — REST client para OATH
  • GuildClient / GuildClientService — REST client para Guild
  • HeraldClientService — Envio de emails via Herald
  • ChatClient / ChatClientService — Chat em tempo real via Rune Courier
  • VaultClient — Upload de arquivos
  • CorrelationIdClientHeadersFactory — Propagacao de correlation ID entre servicos
  • ScrollsClient — Logging centralizado

Uso no application.properties

# OATH
quarkus.rest-client.oath-api.url=http://oath:8080
haus.oath.application-id=minha-app
haus.oath.provider=OATH

# Guild
quarkus.rest-client.guild-api.url=http://guild:8080

# Herald
quarkus.rest-client.herald-api.url=http://herald:8080
haus.herald.enabled=true
haus.herald.from=[email protected]

# Vault
quarkus.rest-client.vault-api.url=http://vault:8080
haus.vault.enabled=true

# Rune Courier (Chat)
quarkus.rest-client.chat-api.url=http://parley:8080
haus.chat.enabled=true
haus.chat.application-id=minha-app
haus.chat.auth.email=minha-app
haus.chat.auth.password=MINHA-APP987!@#