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.
GET /configuracoes/publica
{
"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>
{
"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]
}
}
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>
{
"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
{
"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 — 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>
{
"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>