fix: usar field IDs numéricos en query Metabase
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 59s

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.
This commit is contained in:
2025-12-05 12:01:20 -06:00
parent ed2f8b1107
commit 6da1552ae1

View File

@@ -50,19 +50,22 @@ export default defineEventHandler(async (event): Promise<Contact[]> => {
}
// 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<Contact[]> => {
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<MetabaseResponse>(`${metabaseUrl}/api/dataset`, {
method: 'POST',
@@ -89,6 +94,8 @@ export default defineEventHandler(async (event): Promise<Contact[]> => {
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) => {