Skip to main content

Visão Geral

As configurações são separadas em três coleções no Firestore:
ColeçãoAcessoConteúdo
configuracoes_siteSUPER_ADMINNome, logo, favicon, cores, sliders, SEO
configuracoes_notificacoesTodosCanais de aviso, credenciais Brevo/WhatsApp
configuracoes_perfilTodosFoto 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.
GET /configuracoes/publica
Resposta 200
{
  "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.
GET /configuracoes
Cookie: imob_session=<session_cookie>
Resposta 200
{
  "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.
Valores mascarados ("••••••••") enviados de volta são ignorados — a chave real no banco não é sobrescrita.
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]
  }
}
Resposta 200
{
  "ok": true
}

Alterar senha

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

POST /configuracoes/upload/logo
Cookie: imob_session=<session_cookie>
Content-Type: multipart/form-data

arquivo: <imagem>

Logo branca (para fundos escuros)

POST /configuracoes/upload/logo-branca
Cookie: imob_session=<session_cookie>
Content-Type: multipart/form-data

arquivo: <imagem>

Favicon

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

POST /configuracoes/upload/foto-perfil
Cookie: imob_session=<session_cookie>
Content-Type: multipart/form-data

arquivo: <imagem>
Resposta 201
{
  "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.
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
Resposta 201
{
  "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.
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.
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

GET /configuracoes/whatsapp/status
Cookie: imob_session=<session_cookie>
Resposta 200 — Conectado
{ "state": "open" }
Resposta 200 — Desconectado
{ "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.
POST /configuracoes/whatsapp/gerar-qr
Cookie: imob_session=<session_cookie>
Resposta 200
{
  "base64": "data:image/png;base64,iVBORw0KGgo..."
}

Desconectar instância

Remove a instância do WhatsApp completamente da Evolution API.
DELETE /configuracoes/whatsapp/desconectar
Cookie: imob_session=<session_cookie>