# Glossário de Domínio (Baseado no Código)

Este glossário define termos que aparecem no código e documentos/procedimentos relacionados.

## Tenant / Multi-tenant

- **Tenant (multi-tenancy)**: o projeto usa uma conexão Laravel chamada `tenant` para isolar dados.
  - Evidência: `app/Models/TenantModel.php` fixa `protected $connection = 'tenant'`.
  - Evidência: `App\Http\Middleware\Tenant` chama `App\Models\Cliente::connect()` antes do controller.

## Tenant connection (`tenant`)

- **Conexão `tenant`**: connection configurada dinamicamente em runtime (host/database/username/password) pelo método `connect()`.
  - Evidência: `app/Models/Cliente/Cliente.php` faz `DB::purge('tenant')`, `Config::set('database.connections.tenant.*')`, `DB::reconnect('tenant')`.

## `cliente_id`

- **`cliente_id`**: campo usado para identificar qual cliente/tenant deve ser conectado no middleware.
  - Evidência: `app/Http/Middleware/Tenant.php` usa:
    - `where('cliente_id', $request->token_whatsapp)` quando `token_whatsapp` existe
    - `where('cliente_id', Auth()->user()->cliente_id)` quando o request não traz `token_whatsapp`

## `token_whatsapp`

- **`token_whatsapp`**: parâmetro no request usado pelo middleware para identificar o tenant (via `cliente_id`).
  - Evidência: `app/Http/Middleware/Tenant.php`.

## `client_id`

- **`client_id`**: aparece em:
  1. APIs de integração OAuth de e-mail (parâmetro informado no request ou no JSON do corpo):
     - Evidência: `app/Http/Controllers/Api/ApiEmailController.php`:
       - comentário “client_id: id do cliente”
       - leitura de `client_id` em `updateEmailToken()`
  2. Tabelas/configs do tenant que armazenam credenciais:
     - Evidência: migration `database/migrations/tenant/2024_07_18_182302_create_configuracao_email.php` cria `configuracao_email` com `client_id`, `client_secret` e `tenant_id`.
  3. Storage e jobs:
     - Evidência: `app/Services/Bot/FileUploadService.php`:
       - `$client_id = $client_id ?: Auth::user()->cliente_id;`

## `tenant_id`

- **`tenant_id`**: aparece na tabela `configuracao_email` (migration do tenant).
  - Evidência: `database/migrations/tenant/2024_07_18_182302_create_configuracao_email.php`.
- Não identificado no código: como `tenant_id` se relaciona com o “tenant” que o middleware conecta (isso parece ser um conceito específico do OAuth/credenciais).

## Permissões / roles

- **Roles e permissões**: existe uma trait `OmniRolesPermissions` que busca permissões em cache e decide qual filas um usuário pode acessar.
  - Evidência: `app/Traits/OmniRolesPermissions.php`.

## O que não foi identificado no código

- “Contrato” formal de camadas (ex.: interface padrão para services/repositories) — **Não identificado no código**.
- “Global Scope” automático para filtrar por tenant — **Não identificado no código** (o mecanismo identificado é troca da connection `tenant`).

