Skip to main content

Arquitetura do Portal

Visao geral da arquitetura do monorepo Portal — plataforma de gestao smart home/IoT.

Visao Geral (alto nível)

Packages do monorepo

Arquitetura interna do core

Fluxo de uma requisição

  1. HTTP → rota Hono em infrastructure/web/routes/
  2. Middleware Logto válida JWT
  3. Repositorio Postgres instanciado
  4. Use case em application/use-cases/ executa a regra
  5. Eventos publicados no event-emitter; serviços disparados pelo service-registry
  6. Resposta JSON

Edges, SDK e MQTT

Tópicos MQTT relevantes:
  • portal/automation/manual_trigger — disparar automação
  • portal/automation/lifecycle — eventos CRUD de automações
  • portal/script/trigger — executar script
  • portal/events/webhook — webhook recebido
  • homeassistant/+/+/state — atualizações de estado de devices

Padroes transversais

  • Clean Architecture + DDD: domain isolado de framework; repositorios são interfaces no domain e implementacoes em infrastructure.
  • Event Bus tipado (core/shared/event-emitter.ts): eventos como User.Created, ConfigEntry.Created, State.Changed, Alexa.*, mobile_app_notification_action.
  • Service Registry (application/services/service-registry.ts): handlers nomeados como integration.domain.service (ex.: tuya.light.turn_on, script.script.press).
  • SDK-first para integrações: novas integrações moram em packages/sdk/src/integrations/{domain}/ e rodam em um edge — apenas casos especiais (MQTT, Discord, IRRF) ficam no core.

Referências no código

  • Schema do banco: packages/core/src/infrastructure/config/schema.drizzle.ts
  • Registro de rotas: packages/core/src/infrastructure/web/app.ts
  • Factory de entidades Alexa: packages/core/src/infrastructure/adapters/components/alexa/entity-factory.ts
  • Workspace Deno: deno.json (raiz)
  • Stack local: docker-compose.yml