# Camadas (Layers) Encontradas no Código

Este documento descreve as camadas com base nas evidências do repositório.

## 1. Roteamento HTTP e Middleware

- Kernel: `app/Http/Kernel.php`
  - Grupo `web` inclui `VerifyCsrfToken`, `VerifiedMFA` e outros middleware.
  - Grupo `api` inclui throttle e `bindings`.
- Middleware multi-tenant:
  - `app/Http/Middleware/Tenant.php`
    - Chama `App\Models\Cliente::connect()` para ajustar dinamicamente a conexão `tenant`.
- Middleware de MFA:
  - `app/Http/Middleware/VerifiedMFA.php`
    - Delegação ao `LoginController` com base em flags no request (`verify`, `sendcode`, `sendRedefine`).

Evidência principal de tenant:

- `app/Http/Middleware/Tenant.php`:
  - Identifica por `$request->token_whatsapp` ou `Auth()->user()->cliente_id`
  - Chama `$user->connect()`

## 2. Controllers (entrada de request)

Controllers ficam em `app/Http/Controllers/`.

Padrão observado:
- Controllers constroem respostas (HTML/JSON) e frequentemente montam queries diretamente via Eloquent/Query Builder.
- Há controllers de integração (WhatsApp/Instagram/Email/Webchat/Telefonia) e controllers de atendimento/relatórios.

## 3. Modelos Eloquent e Persistência

Há pelo menos dois “tipos” de base de modelo:

1. **Central / não tenant**
   - `app/Models/MainModel.php` fixa `protected $connection = 'mysql'`
2. **Tenant**
   - `app/Models/TenantModel.php` fixa `protected $connection = 'tenant'`

O multi-tenancy depende fortemente de:
- `TenantModel` (para usar a conexão `tenant`)
- `Cliente::connect()` (para apontar a conexão `tenant` para o banco do tenant).

Evidência:
- `app/Models/TenantModel.php` define `protected $connection = 'tenant'`
- `app/Models/Cliente/Cliente.php` em `connect()` faz purge/reconnect na connection `tenant` e set de host/database/username/password.

## 4. Services e Integrações

Existe `app/Services/` com serviços por domínio.

Exemplos encontrados (nomes/arquivos):
- `app/Services/Message/*` (ex.: `MessageService`, `TwilioMessageSender`, etc.)
- `app/Services/Webhook/*` (ex.: `WebhookService`, `WebhookSender`)
- `app/Services/RabbitMQ/*`
- `app/Services/Bot/*`
- `app/Services/Relatorio/*`

## 5. Repositories, Jobs, Traits (suporte)

- `app/Repositories/`: há repositórios (ex.: RabbitMQ).
- `app/Jobs/`: existem jobs (ex.: `ProcessFileJob` foi observado em searches e fluxos).
- `app/Traits/`: há traits (ex.: permissões e validações em alguns fluxos).

Observação de escopo:
- Não identificado no código: contratos formais entre camadas (ex.: interfaces de repository “trocáveis” para unit tests), nem dependências invertidas documentadas explicitamente.

