feat(media): configurar dimensiones 640x360 para noticias y 640x640 para clasificados y eventos

This commit is contained in:
AI Bot 2026-08-24 12:31:58 -05:00
parent 987fe8aef6
commit 0e9bb2365e
5 changed files with 21 additions and 11 deletions

View File

@ -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 (

View File

@ -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 (

View File

@ -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}
/>
)

View File

@ -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.

View File

@ -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 <p>, <strong>, 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 <p>, <strong>, <ul>/<li> si es apropiado), preservando nombres, fechas, contactos y enlaces originales.
5. fecha_vencimiento: Si el texto indica fecha límite del evento o del aviso (Ej. "hasta el 30 de noviembre", o "el próximo sábado"), devuélvela en formato YYYY-MM-DD. Si no aplica o es una noticia general, pasa null.
`;
// Prepara los contenidos