Documentação de Imagens API - Sistema Cloudinary
Esta seção descreve os endpoints da API relacionados ao gerenciamento de imagens, após migração para Cloudinary.
🚨 MIGRAÇÃO IMPORTANTE
Sistema anterior (DEPRECATED): - Upload via backend com Multer - Armazenamento local no servidor - Perda de dados a cada deploy
Sistema atual (ATIVO): - Upload direto para Cloudinary no frontend - Backend recebe apenas URLs - Persistência permanente no CDN
Endpoints Atualizados
POST /api/imagens
⚠️ MÉTODO ATUALIZADO
Descrição: Cria referência de imagem com URL do Cloudinary (sem upload de arquivo).
Método: POST
URL: /api/imagens
Headers:
Content-Type: application/json
Parâmetros JSON:
- url_imagem (obrigatório): URL completa da imagem no Cloudinary
- imovel_id (obrigatório): ID do imóvel ao qual a imagem será associada
- descricao (obrigatório): Descrição da imagem
Exemplo de Requisição:
POST /api/imagens
Content-Type: application/json
{
"url_imagem": "https://res.cloudinary.com/dajy4w5wi/image/upload/v1759123456/imobiliaria/imoveis/imovel_123_abc.jpg",
"imovel_id": 1,
"descricao": "Vista frontal do imóvel"
}
Exemplo de Resposta (201):
{
"id": 1,
"imovel_id": 1,
"url_imagem": "https://res.cloudinary.com/dajy4w5wi/image/upload/v1759123456/imobiliaria/imoveis/imovel_123_abc.jpg",
"descricao": "Vista frontal do imóvel",
"createdAt": "2025-01-01T12:00:00.000Z",
"updatedAt": "2025-01-01T12:00:00.000Z"
}
Códigos de Status: 201, 400, 500
Autenticação: Não requer
DELETE /api/imagens/:id
✅ FUNCIONAMENTO INALTERADO
Descrição: Exclui uma referência de imagem pelo ID (não deleta do Cloudinary).
Método: DELETE
URL: /api/imagens/:id
Parâmetros:
- id (path, obrigatório): ID da referência de imagem no banco
Exemplo de Requisição:
DELETE /api/imagens/1
Exemplo de Resposta (200):
{
"message": "Imagem excluída com sucesso."
}
⚠️ Nota Importante:
Esta operação remove apenas a referência do banco de dados. A imagem permanece no Cloudinary. Para deletar do Cloudinary, use a função deleteFromNetlify() no frontend.
Códigos de Status: 200, 404, 500
Autenticação: Não requer
GET /api/imagens/:id
✅ FUNCIONAMENTO INALTERADO (URLs atualizadas)
Descrição: Retorna uma imagem específica pelo ID.
Método: GET
URL: /api/imagens/:id
Parâmetros:
- id (path, obrigatório): ID da imagem a ser recuperada
Exemplo de Requisição:
GET /api/imagens/1
Exemplo de Resposta (200):
{
"id": 1,
"imovel_id": 1,
"url_imagem": "https://res.cloudinary.com/dajy4w5wi/image/upload/v1759123456/imobiliaria/imoveis/imovel_123_abc.jpg",
"descricao": "Vista frontal do imóvel",
"createdAt": "2025-01-01T12:00:00.000Z",
"updatedAt": "2025-01-01T12:00:00.000Z"
}
⚡ Mudança: url_imagem agora contém URLs completas do Cloudinary com HTTPS.
Códigos de Status: 200, 404, 500
Autenticação: Não requer
GET /api/imagens/imovel/:imovelId
✅ FUNCIONAMENTO INALTERADO (URLs atualizadas)
Descrição: Retorna todas as imagens associadas a um imóvel específico.
Método: GET
URL: /api/imagens/imovel/:imovelId
Parâmetros:
- imovelId (path, obrigatório): ID do imóvel para recuperar as imagens
Exemplo de Requisição:
GET /api/imagens/imovel/1
Exemplo de Resposta (200):
[
{
"id": 1,
"imovel_id": 1,
"url_imagem": "https://res.cloudinary.com/dajy4w5wi/image/upload/v1759123456/imobiliaria/imoveis/imovel_1_abc.jpg",
"descricao": "Vista frontal do imóvel",
"createdAt": "2025-01-01T12:00:00.000Z",
"updatedAt": "2025-01-01T12:00:00.000Z"
},
{
"id": 2,
"imovel_id": 1,
"url_imagem": "https://res.cloudinary.com/dajy4w5wi/image/upload/v1759123456/imobiliaria/imoveis/imovel_1_def.jpg",
"descricao": "Cozinha do imóvel",
"createdAt": "2025-01-01T12:00:00.000Z",
"updatedAt": "2025-01-01T12:00:00.000Z"
}
]
Códigos de Status: 200, 404, 500
Autenticação: Não requer
🚀 Fluxo Completo de Upload
1. Upload no Frontend (Cloudinary)
// Importar serviço
import { uploadImovelImage } from '@/services/netlifyUploadService';
// Upload direto para Cloudinary
const file = event.target.files[0];
try {
const cloudinaryUrl = await uploadImovelImage(file, imovelId, "Descrição");
// cloudinaryUrl = "https://res.cloudinary.com/dajy4w5wi/image/upload/v123/imobiliaria/imoveis/abc.jpg"
} catch (error) {
console.error('Erro no upload:', error);
}
2. Criar Referência no Backend
// Enviar apenas URL para o backend
const response = await fetch('/api/imagens', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
url_imagem: cloudinaryUrl,
imovel_id: imovelId,
descricao: "Descrição da imagem"
})
});
3. Exibir Imagem
// Usar URL diretamente do banco (já é completa)
<img
src={imagem.url_imagem}
alt={imagem.descricao}
loading="lazy"
/>
🔧 Configuração Necessária
Frontend (.env.local):
NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME=dajy4w5wi
NEXT_PUBLIC_CLOUDINARY_UPLOAD_PRESET=imobiliaria-bortone-upload
Backend (.env):
# Não precisa de configuração Cloudinary
# Backend só gerencia referências
⚡ Vantagens do Sistema Atual
- ✅ Persistência: Imagens nunca são perdidas
- ✅ Performance: CDN global com cache automático
- ✅ Escalabilidade: Upload paralelo, backend mais rápido
- ✅ Transformações: Otimização automática (WebP, compressão)
- ✅ Segurança: URLs HTTPS, validação de formatos
- ✅ Backup: Redundância automática do Cloudinary
📚 Outros Endpoints Relacionados
- Banners:
/api/banners- Aceitaurl_imagem - Blog:
/api/blog- Aceitaurl_imagem - Publicidades:
/api/publicidade- Aceitaurl_imagem - Imóveis:
/api/imoveis- Funciona com imagens via relação
Autenticação: não requer