# wellinton1/gestor-multi-tenant architecture

> Architecture diagram of the GitHub repository wellinton1/gestor-multi-tenant, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/wellinton1/gestor-multi-tenant
- Repository: https://github.com/wellinton1/gestor-multi-tenant

## Overview

Gestor Multi-Tenant é um painel de gestão para negócios com agendamentos e um portal público de reservas por estabelecimento. O fluxo principal vai do cliente que consulta serviços e envia uma reserva pelo portal, ao servidor que encaminha a requisição à rota do portal e persiste os dados no armazenamento tenant-scoped; a reserva fica pendente para confirmação no painel. Operadores também gerem clientes, equipe, serviços, pagamentos e caixa. A arquitetura abaixo usa os caminhos da árvore e os trechos disponíveis; ligações de subsistemas documentados mas não amostrados foram omitidas quando seu encaminhamento não pôde ser confirmado.

Main entry points: [`app/server.js`](https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/server.js) (Servidor Express), [`app/src/data/store.js`](https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/data/store.js) (Store PostgreSQL), [`app/src/routes/makeCrudRouter.js`](https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/routes/makeCrudRouter.js) (CRUD tenant-scoped), [`app/src/routes/payments.js`](https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/routes/payments.js) (Configuração de pagamentos)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["Interfaces"]
  node_adminui["Painel SPA<br/>[app.js]"]
  node_portalui["Portal público<br/>[portal.js]"]
end

subgraph group_runtime["Servidor e acesso"]
  node_server["Servidor Express<br/>[server.js]"]
  node_authmw["Autenticação<br/>[auth.js]"]
  node_authroutes["Login e setup<br/>[auth.js]"]
end

subgraph group_operations["Gestão do negócio"]
  node_portalroutes["Reservas online<br/>[portal.js]"]
  node_appointments["Agendamentos<br/>[appointments.js]"]
  node_clients["Clientes<br/>[clients.js]"]
  node_employees["Funcionários<br/>[employees.js]"]
  node_services["Serviços e produtos<br/>[services.js]"]
  node_dashboard["Dashboard<br/>[dashboard.js]"]
  node_cash["Fechamento de caixa<br/>[cashClosings.js]"]
  node_payments["Configuração de pagamentos<br/>[payments.js]"]
end

subgraph group_data["Dados multi-tenant"]
  node_crud["CRUD tenant-scoped<br/>[makeCrudRouter.js]"]
  node_tenantcontext["Contexto tenant<br/>[tenant-context.js]"]
  node_store[("Store PostgreSQL<br/>[store.js]")]
end

subgraph group_platform["Plataforma"]
  node_paymentproviders["Provedores de pagamento"]
  node_tenantdb["Bancos por tenant<br/>[tenantDatabases.js]"]
  node_backups["Backups<br/>[backups.js]"]
  node_security["Segurança<br/>[security.js]"]
end

node_operator(("Operador"))
node_customer(("Cliente"))

node_operator -->|"usa painel"| node_adminui
node_customer -->|"faz reserva"| node_portalui
node_adminui -->|"chama API"| node_server
node_portalui -->|"chama API"| node_server
node_server -->|"encaminha auth"| node_authroutes
node_server -->|"encaminha portal"| node_portalroutes
node_server -->|"encaminha agendamentos"| node_appointments
node_server -->|"encaminha clientes"| node_clients
node_server -->|"encaminha equipe"| node_employees
node_server -->|"encaminha catálogo"| node_services
node_server -->|"encaminha dashboard"| node_dashboard
node_server -->|"encaminha caixa"| node_cash
node_server -->|"encaminha pagamentos"| node_payments
node_server -->|"encaminha bancos"| node_tenantdb
node_server -->|"encaminha backups"| node_backups
node_server -->|"encaminha segurança"| node_security
node_authroutes -->|"consulta e grava"| node_store
node_authmw -->|"consulta usuário"| node_store
node_server -->|"propaga contexto"| node_tenantcontext
node_tenantcontext -->|"configura isolamento"| node_store
node_portalroutes -->|"lê e grava reservas"| node_store
node_appointments -->|"lê e grava"| node_store
node_clients -->|"usa CRUD"| node_crud
node_services -->|"usa CRUD"| node_crud
node_crud -->|"exige login e loja"| node_authmw
node_crud -->|"lê e grava"| node_store
node_employees -->|"lê e grava"| node_store
node_dashboard -->|"consulta dados"| node_store
node_cash -->|"lê e grava"| node_store
node_payments -->|"lê e grava configuração"| node_store
node_payments -.->|"usa provedor"| node_paymentproviders
node_tenantdb -->|"provisiona e migra"| node_store
node_backups -->|"consulta dados"| node_store
node_security -->|"consulta dados"| node_store

click node_adminui "https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/public/js/app.js"
click node_portalui "https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/public/js/portal.js"
click node_server "https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/server.js"
click node_authmw "https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/middleware/auth.js"
click node_authroutes "https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/routes/auth.js"
click node_portalroutes "https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/routes/portal.js"
click node_appointments "https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/routes/appointments.js"
click node_clients "https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/routes/clients.js"
click node_employees "https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/routes/employees.js"
click node_services "https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/routes/services.js"
click node_dashboard "https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/routes/dashboard.js"
click node_cash "https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/routes/cashClosings.js"
click node_payments "https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/routes/payments.js"
click node_paymentproviders "https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/utils/payment-providers.js"
click node_crud "https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/routes/makeCrudRouter.js"
click node_tenantcontext "https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/data/tenant-context.js"
click node_store "https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/data/store.js"
click node_tenantdb "https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/routes/tenantDatabases.js"
click node_backups "https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/routes/backups.js"
click node_security "https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/routes/security.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_adminui,node_portalui,node_customer toneBlue
class node_server,node_authmw,node_authroutes toneAmber
class node_portalroutes,node_appointments,node_clients,node_employees,node_services,node_dashboard,node_cash,node_payments toneMint
class node_crud,node_tenantcontext,node_store toneRose
class node_paymentproviders,node_tenantdb,node_backups,node_security,node_operator toneIndigo
```

## Components

### Interfaces

- [Painel SPA](https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/public/js/app.js): `app/public/js/app.js`
- [Portal público](https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/public/js/portal.js): `app/public/js/portal.js`

### Servidor e acesso

- [Servidor Express](https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/server.js): `app/server.js`
- [Autenticação](https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/middleware/auth.js): `app/src/middleware/auth.js`
- [Login e setup](https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/routes/auth.js): `app/src/routes/auth.js`

### Gestão do negócio

- [Reservas online](https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/routes/portal.js): `app/src/routes/portal.js`
- [Agendamentos](https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/routes/appointments.js): `app/src/routes/appointments.js`
- [Clientes](https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/routes/clients.js): `app/src/routes/clients.js`
- [Funcionários](https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/routes/employees.js): `app/src/routes/employees.js`
- [Serviços e produtos](https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/routes/services.js): `app/src/routes/services.js`
- [Dashboard](https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/routes/dashboard.js): `app/src/routes/dashboard.js`
- [Fechamento de caixa](https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/routes/cashClosings.js): `app/src/routes/cashClosings.js`
- [Configuração de pagamentos](https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/routes/payments.js): `app/src/routes/payments.js`

### Dados multi-tenant

- [CRUD tenant-scoped](https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/routes/makeCrudRouter.js): `app/src/routes/makeCrudRouter.js`
- [Contexto tenant](https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/data/tenant-context.js): `app/src/data/tenant-context.js`
- [Store PostgreSQL](https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/data/store.js): `app/src/data/store.js`

### Plataforma

- [Provedores de pagamento](https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/utils/payment-providers.js): `app/src/utils/payment-providers.js`
- [Bancos por tenant](https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/routes/tenantDatabases.js): `app/src/routes/tenantDatabases.js`
- [Backups](https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/routes/backups.js): `app/src/routes/backups.js`
- [Segurança](https://github.com/wellinton1/gestor-multi-tenant/blob/main/app/src/routes/security.js): `app/src/routes/security.js`

### Other components

- **Operador**
- **Cliente**

## Connections

- Operador → Painel SPA: usa painel
- Cliente → Portal público: faz reserva
- Painel SPA → Servidor Express: chama API
- Portal público → Servidor Express: chama API
- Servidor Express → Login e setup: encaminha auth
- Servidor Express → Reservas online: encaminha portal
- Servidor Express → Agendamentos: encaminha agendamentos
- Servidor Express → Clientes: encaminha clientes
- Servidor Express → Funcionários: encaminha equipe
- Servidor Express → Serviços e produtos: encaminha catálogo
- Servidor Express → Dashboard: encaminha dashboard
- Servidor Express → Fechamento de caixa: encaminha caixa
- Servidor Express → Configuração de pagamentos: encaminha pagamentos
- Servidor Express → Bancos por tenant: encaminha bancos
- Servidor Express → Backups: encaminha backups
- Servidor Express → Segurança: encaminha segurança
- Login e setup → Store PostgreSQL: consulta e grava
- Autenticação → Store PostgreSQL: consulta usuário
- Servidor Express → Contexto tenant: propaga contexto
- Contexto tenant → Store PostgreSQL: configura isolamento
- Reservas online → Store PostgreSQL: lê e grava reservas
- Agendamentos → Store PostgreSQL: lê e grava
- Clientes → CRUD tenant-scoped: usa CRUD
- Serviços e produtos → CRUD tenant-scoped: usa CRUD
- CRUD tenant-scoped → Autenticação: exige login e loja
- CRUD tenant-scoped → Store PostgreSQL: lê e grava
- Funcionários → Store PostgreSQL: lê e grava
- Dashboard → Store PostgreSQL: consulta dados
- Fechamento de caixa → Store PostgreSQL: lê e grava
- Configuração de pagamentos → Store PostgreSQL: lê e grava configuração
- Configuração de pagamentos → Provedores de pagamento: usa provedor
- Bancos por tenant → Store PostgreSQL: provisiona e migra
- Backups → Store PostgreSQL: consulta dados
- Segurança → Store PostgreSQL: consulta dados
