From 0e9bb2365ee889a2b05ecb2764a2e4c32f20b097 Mon Sep 17 00:00:00 2001 From: AI Bot Date: Mon, 24 Aug 2026 12:31:58 -0500 Subject: [PATCH] feat(media): configurar dimensiones 640x360 para noticias y 640x640 para clasificados y eventos --- src/app/clasificados/page.tsx | 2 +- src/app/eventos/page.tsx | 2 +- src/app/page.tsx | 7 ++++++- src/components/publications/PostCard.tsx | 4 +++- src/lib/gemini.ts | 17 ++++++++++------- 5 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/app/clasificados/page.tsx b/src/app/clasificados/page.tsx index 9487681..bd3eb12 100644 --- a/src/app/clasificados/page.tsx +++ b/src/app/clasificados/page.tsx @@ -140,7 +140,7 @@ export default async function ClasificadosPage() { const mediaObj = post.resolved_media || (typeof post.imagen_destacada_id === 'object' ? post.imagen_destacada_id : null) as MediaItem | null; if (mediaObj) { - imagenUrl = `${ENDPOINT}/storage/buckets/${mediaObj.bucket_id}/files/${mediaObj.file_id}/preview?project=${PROJECT_ID}&width=640&height=360&quality=80`; + imagenUrl = `${ENDPOINT}/storage/buckets/${mediaObj.bucket_id}/files/${mediaObj.file_id}/preview?project=${PROJECT_ID}&width=640&height=640&quality=80`; } return ( diff --git a/src/app/eventos/page.tsx b/src/app/eventos/page.tsx index 3209cca..a0c50a5 100644 --- a/src/app/eventos/page.tsx +++ b/src/app/eventos/page.tsx @@ -140,7 +140,7 @@ export default async function EventosPage() { const mediaObj = post.resolved_media || (typeof post.imagen_destacada_id === 'object' ? post.imagen_destacada_id : null) as MediaItem | null; if (mediaObj) { - imagenUrl = `${ENDPOINT}/storage/buckets/${mediaObj.bucket_id}/files/${mediaObj.file_id}/preview?project=${PROJECT_ID}&width=640&height=360&quality=80`; + imagenUrl = `${ENDPOINT}/storage/buckets/${mediaObj.bucket_id}/files/${mediaObj.file_id}/preview?project=${PROJECT_ID}&width=640&height=640&quality=80`; } return ( diff --git a/src/app/page.tsx b/src/app/page.tsx index acec4a6..4574de2 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -217,10 +217,14 @@ export default async function Home(props: { searchParams: Promise<{ [key: string const ENDPOINT = process.env.NEXT_PUBLIC_APPWRITE_ENDPOINT || 'https://appwrite.almeira.com.co/v1'; let imagenUrl = post.og_image_url || null; + const isSquare = post.tipo === 'evento' || post.tipo === 'aviso' || + (typeof post.tipo_publicacion_id === 'object' && (post.tipo_publicacion_id.codigo === 'EVENTO' || post.tipo_publicacion_id.codigo === 'CLASIFICADO')); + const imgHeight = isSquare ? 640 : 360; + const mediaObj = post.resolved_media || (typeof post.imagen_destacada_id === 'object' ? post.imagen_destacada_id : null) as MediaItem | null; if (mediaObj) { - imagenUrl = `${ENDPOINT}/storage/buckets/${mediaObj.bucket_id}/files/${mediaObj.file_id}/preview?project=${PROJECT_ID}&width=640&height=360&quality=85`; + imagenUrl = `${ENDPOINT}/storage/buckets/${mediaObj.bucket_id}/files/${mediaObj.file_id}/preview?project=${PROJECT_ID}&width=640&height=${imgHeight}&quality=85`; } return ( @@ -237,6 +241,7 @@ export default async function Home(props: { searchParams: Promise<{ [key: string showFooterDate={cardSettings.showFooterDate} showFooterButton={cardSettings.showFooterButton} footerText={cardSettings.footerText} + imageAspect={isSquare ? 'aspect-square' : 'aspect-video'} isAdmin={isAdmin} /> ) diff --git a/src/components/publications/PostCard.tsx b/src/components/publications/PostCard.tsx index d707c67..944aef6 100644 --- a/src/components/publications/PostCard.tsx +++ b/src/components/publications/PostCard.tsx @@ -36,7 +36,9 @@ function resolveImageUrl( if (typeof post.imagen_destacada_id === 'object') { const { bucket_id, file_id } = post.imagen_destacada_id; - return `${endpoint}/storage/buckets/${bucket_id}/files/${file_id}/preview?project=${projectId}&width=640&height=360&quality=80`; + const isSquare = post.tipo === 'evento' || post.tipo === 'aviso'; + const height = isSquare ? 640 : 360; + return `${endpoint}/storage/buckets/${bucket_id}/files/${file_id}/preview?project=${projectId}&width=640&height=${height}&quality=80`; } // If it's a string, we can't generate a valid URL because it's a document ID, not a file ID. diff --git a/src/lib/gemini.ts b/src/lib/gemini.ts index 59cba44..79c4699 100644 --- a/src/lib/gemini.ts +++ b/src/lib/gemini.ts @@ -20,14 +20,17 @@ export async function processWhatsAppMessage( } const systemInstruction = ` - Eres un asistente editorial experto. - Analiza un mensaje enviado al grupo de WhatsApp "Publicaciones Almeira". + Eres un asistente editorial experto de Almeira Web. + Analiza los mensajes y recursos multimedia recibidos desde WhatsApp para estructurarlos como publicaciones del portal. Debes estructurar el mensaje en base a lo siguiente: - 1. titulo: Asigna un título claro y corto. - 2. tipo: Determina si es "noticia" (Noticias, actualidad), "evento" (Invitaciones, programaciones), o "aviso" (Clasificados, empleos, ventas, anuncios parroquiales, etc). - 3. seo_descripcion: Un texto máximo de 150 caracteres describiendo de qué trata. - 4. contenido: El texto detallado de la publicación en HTML válido formateado (usa

, , listas locales si es útil) pero retén la información original importante. - 5. fecha_vencimiento: Si el texto indica fecha límite del evento o del aviso (Ej, "hasta el 30 de noviembre", o "el sábado"), devuélvela en formato YYYY-MM-DD. Si no tiene, omite el campo o pasa null. + 1. titulo: Asigna un título claro, profesional y conciso (máx. 70 caracteres). + 2. tipo: Determina la categoría exacta: + - "noticia": Noticias generales, política, actualidad, comunicados y reportajes (dimensiones recomendadas de imagen: 640x360 px, relación 16:9). + - "evento": Invitaciones a actividades, jornadas, ferias, foros, congresos, festivales o convocatorias con fecha (dimensiones de imagen: 640x640 px, relación 1:1). + - "aviso": Clasificados, ofertas de empleo, compra/venta, servicios profesionales, comunicados comunitarios (dimensiones de imagen: 640x640 px, relación 1:1). + 3. seo_descripcion: Un resumen conciso de máximo 150 caracteres optimizado para redes y motores de búsqueda. + 4. contenido: El texto detallado de la publicación en HTML válido y limpio (usa

, ,