> ## Documentation Index
> Fetch the complete documentation index at: https://docs.patrimonion.com.br/llms.txt
> Use this file to discover all available pages before exploring further.

# Configurações

> Configurações da plataforma: dados do site, notificações, integrações WhatsApp via Evolution API e upload de assets.

## Visão Geral

As configurações são separadas em três coleções no Firestore:

| Coleção                      | Acesso       | Conteúdo                                    |
| ---------------------------- | ------------ | ------------------------------------------- |
| `configuracoes_site`         | SUPER\_ADMIN | Nome, logo, favicon, cores, sliders, SEO    |
| `configuracoes_notificacoes` | Todos        | Canais de aviso, credenciais Brevo/WhatsApp |
| `configuracoes_perfil`       | Todos        | Foto de perfil do usuário                   |

***

## Configurações públicas

Endpoint **sem autenticação**. Usado pelo frontend na página de login para carregar nome do site, logo, cores e sliders.

```http theme={null}
GET /configuracoes/publica
```

```json Resposta 200 theme={null}
{
  "nomeSite": "Patrimonion",
  "descricao": "Gestão de imóveis simplificada.",
  "logo": "https://...",
  "logoBranca": "https://...",
  "favicon": "https://...",
  "tituloSEO": "Patrimonion — Gestão Imobiliária",
  "descricaoSEO": "...",
  "tagsGoogle": "...",
  "cores": {
    "primaria": "#EAB308",
    "secundaria": "#18181B",
    "bgPagina": "#FFFFFF",
    "textoPrincipal": "#111827"
  },
  "sliders": [
    {
      "id": "uuid",
      "url": "https://...",
      "titulo": "Gerencie seus imóveis",
      "subtitulo": "Tudo em um só lugar.",
      "tag": "Novo",
      "stat": "500+",
      "statLabel": "Imóveis gerenciados"
    }
  ],
  "cadastros": {
    "aberto": true
  }
}
```

***

## Buscar configurações

Retorna as configurações do usuário autenticado. Chaves sensíveis (`brevoApiKey`, `whatsappToken`, `brevoSmsApiKey`) são mascaradas como `"••••••••"` na resposta — nunca expostas em texto claro.

```http theme={null}
GET /configuracoes
Cookie: imob_session=<session_cookie>
```

```json Resposta 200 theme={null}
{
  "nomeSite": "Patrimonion",
  "logo": "https://...",
  "notificacoes": {
    "emailAtivo": true,
    "brevoApiKey": "••••••••",
    "brevoEmailRemetente": "noreply@patrimonion.com.br",
    "whatsappAtivo": true,
    "whatsappToken": "••••••••",
    "whatsappPhoneId": "123456789",
    "evolutionAtivo": false,
    "diasAvisoVencimento": [3, 1, 0],
    "diasAvisoAtraso": [1, 3, 7]
  }
}
```

***

## Atualizar configurações

Aceita qualquer combinação de campos. Campos de site e de notificações podem ser enviados juntos. O campo `notificacoes` é um objeto aninhado — apenas os campos enviados são atualizados (merge).

Campos protegidos ignorados mesmo que enviados: `userId`, `logoKey`, `logoBrancaKey`, `faviconKey`, `criadoEm`.

<Info>
  Valores mascarados (`"••••••••"`) enviados de volta são ignorados — a chave real no banco não é sobrescrita.
</Info>

```http theme={null}
PATCH /configuracoes
Cookie: imob_session=<session_cookie>
Content-Type: application/json

{
  "notificacoes": {
    "emailAtivo": true,
    "brevoApiKey": "xkeysib-real-key-aqui",
    "brevoEmailRemetente": "noreply@seudominio.com",
    "diasAvisoVencimento": [5, 3, 1, 0]
  }
}
```

```json Resposta 200 theme={null}
{
  "ok": true
}
```

***

## Alterar senha

```http theme={null}
PATCH /configuracoes/senha
Cookie: imob_session=<session_cookie>
Content-Type: application/json

{
  "newPassword": "novasenha123"
}
```

A senha é atualizada diretamente no Firebase Authentication via Admin SDK. Mínimo de 6 caracteres.

***

## Upload de assets do site

Requer role `SUPER_ADMIN`. Todos os assets vão para o bucket **público** do MinIO.

### Logo principal

```http theme={null}
POST /configuracoes/upload/logo
Cookie: imob_session=<session_cookie>
Content-Type: multipart/form-data

arquivo: <imagem>
```

### Logo branca (para fundos escuros)

```http theme={null}
POST /configuracoes/upload/logo-branca
Cookie: imob_session=<session_cookie>
Content-Type: multipart/form-data

arquivo: <imagem>
```

### Favicon

```http theme={null}
POST /configuracoes/upload/favicon
Cookie: imob_session=<session_cookie>
Content-Type: multipart/form-data

arquivo: <imagem>
```

Formatos aceitos: `image/jpeg`, `image/png`, `image/webp`, `image/svg+xml`, `image/x-icon`. Limite: 10MB. O arquivo anterior é deletado automaticamente do MinIO antes do upload.

***

## Foto de perfil do usuário

```http theme={null}
POST /configuracoes/upload/foto-perfil
Cookie: imob_session=<session_cookie>
Content-Type: multipart/form-data

arquivo: <imagem>
```

```json Resposta 201 theme={null}
{
  "url": "https://...",
  "key": "uid123/perfil/foto-1706123456789.jpg"
}
```

Além de salvar em `configuracoes_perfil`, sincroniza o `photoURL` no Firebase Authentication.

***

## Sliders da página de login

### Adicionar slide

Requer role `SUPER_ADMIN`.

```http theme={null}
POST /configuracoes/upload/slider
Cookie: imob_session=<session_cookie>
Content-Type: multipart/form-data

arquivo: <imagem>
titulo: Gerencie seus imóveis
subtitulo: Tudo em um só lugar.
tag: Novo
stat: 500+
statLabel: Imóveis gerenciados
```

```json Resposta 201 theme={null}
{
  "slide": {
    "id": "uuid-gerado",
    "url": "https://...",
    "key": "uid123/sliders/uuid.jpg",
    "titulo": "Gerencie seus imóveis",
    "subtitulo": "Tudo em um só lugar.",
    "tag": "Novo",
    "stat": "500+",
    "statLabel": "Imóveis gerenciados"
  }
}
```

### Editar slide

Campos editáveis: `titulo`, `subtitulo`, `cta`, `tag`, `stat`, `statLabel`. A imagem não pode ser trocada — delete e recrie o slide.

```http theme={null}
PATCH /configuracoes/slider/:slideId
Cookie: imob_session=<session_cookie>
Content-Type: application/json

{
  "titulo": "Novo título",
  "cta": "Começar agora"
}
```

### Deletar slide

Remove o arquivo do MinIO e o registro na configuração.

```http theme={null}
DELETE /configuracoes/slider/:slideId
Cookie: imob_session=<session_cookie>
```

***

## WhatsApp via Evolution API

Integração com Evolution API para WhatsApp sem uso de templates aprovados (mensagens de texto livre).

### Verificar status da instância

```http theme={null}
GET /configuracoes/whatsapp/status
Cookie: imob_session=<session_cookie>
```

```json Resposta 200 — Conectado theme={null}
{ "state": "open" }
```

```json Resposta 200 — Desconectado theme={null}
{ "state": "DISCONNECTED" }
```

### Gerar QR Code para conexão

Cria ou reconecta a instância `imob_{userId}` na Evolution API e retorna o QR Code em base64.

```http theme={null}
POST /configuracoes/whatsapp/gerar-qr
Cookie: imob_session=<session_cookie>
```

```json Resposta 200 theme={null}
{
  "base64": "data:image/png;base64,iVBORw0KGgo..."
}
```

### Desconectar instância

Remove a instância do WhatsApp completamente da Evolution API.

```http theme={null}
DELETE /configuracoes/whatsapp/desconectar
Cookie: imob_session=<session_cookie>
```
