From 6da1552ae1dc207defa1b5c42087bf33b8fc54e9 Mon Sep 17 00:00:00 2001 From: josedario87 Date: Fri, 5 Dec 2025 12:01:20 -0600 Subject: [PATCH] =?UTF-8?q?fix:=20usar=20field=20IDs=20num=C3=A9ricos=20en?= =?UTF-8?q?=20query=20Metabase?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit El filtro de empleados no funcionaba porque Metabase requiere IDs de campo numéricos (463 para empleado, 453 para id) en lugar de nombres de campo como strings. --- nuxt4/server/api/contacts/index.get.ts | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/nuxt4/server/api/contacts/index.get.ts b/nuxt4/server/api/contacts/index.get.ts index 1c90e52..d0e561d 100644 --- a/nuxt4/server/api/contacts/index.get.ts +++ b/nuxt4/server/api/contacts/index.get.ts @@ -50,19 +50,22 @@ export default defineEventHandler(async (event): Promise => { } // Construir filtros para la query + // Nota: Metabase requiere field IDs numéricos, no nombres de campo + // IDs obtenidos de la metadata de la tabla 15 (Clientes): + // - id: 453, empleado: 463 const filters: unknown[] = [] // Filtro de empleados (por defecto true) const empleadoFilter = query.empleado !== 'false' if (empleadoFilter) { - filters.push(['=', ['field', 'empleado', { 'base-type': 'type/Boolean' }], true]) + filters.push(['=', ['field', 463, null], true]) } // Filtro por ID exacto if (query.id) { const idNum = parseInt(query.id as string) if (!isNaN(idNum)) { - filters.push(['=', ['field', 'id', { 'base-type': 'type/BigInteger' }], idNum]) + filters.push(['=', ['field', 453, null], idNum]) } } @@ -72,13 +75,15 @@ export default defineEventHandler(async (event): Promise => { type: 'query', query: { 'source-table': tableId, - 'order-by': [['asc', ['field', 'id', { 'base-type': 'type/BigInteger' }]]], + 'order-by': [['asc', ['field', 453, null]]], filter: filters.length > 0 ? (filters.length === 1 ? filters[0] : ['and', ...filters]) : undefined } } + console.log('📊 Query a Metabase:', JSON.stringify(metabaseQuery, null, 2)) + try { const response = await $fetch(`${metabaseUrl}/api/dataset`, { method: 'POST', @@ -89,6 +94,8 @@ export default defineEventHandler(async (event): Promise => { body: metabaseQuery }) + console.log('📊 Respuesta Metabase - filas:', response.data?.rows?.length || 0) + // Mapear columnas a objetos const cols = response.data.cols.map((col) => col.name) const contacts: Contact[] = response.data.rows.map((row) => {