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.
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
tenantIdno 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 OATHOathClient/OathClientService— REST client para OATHGuildClient/GuildClientService— REST client para GuildHeraldClientService— Envio de emails via HeraldChatClient/ChatClientService— Chat em tempo real via Rune CourierVaultClient— Upload de arquivosCorrelationIdClientHeadersFactory— Propagacao de correlation ID entre servicosScrollsClient— 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!@#