fix: usar field IDs numéricos en query Metabase
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 59s
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:
@@ -50,19 +50,22 @@ export default defineEventHandler(async (event): Promise<Contact[]> => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Construir filtros para la query
|
// 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[] = []
|
const filters: unknown[] = []
|
||||||
|
|
||||||
// Filtro de empleados (por defecto true)
|
// Filtro de empleados (por defecto true)
|
||||||
const empleadoFilter = query.empleado !== 'false'
|
const empleadoFilter = query.empleado !== 'false'
|
||||||
if (empleadoFilter) {
|
if (empleadoFilter) {
|
||||||
filters.push(['=', ['field', 'empleado', { 'base-type': 'type/Boolean' }], true])
|
filters.push(['=', ['field', 463, null], true])
|
||||||
}
|
}
|
||||||
|
|
||||||
// Filtro por ID exacto
|
// Filtro por ID exacto
|
||||||
if (query.id) {
|
if (query.id) {
|
||||||
const idNum = parseInt(query.id as string)
|
const idNum = parseInt(query.id as string)
|
||||||
if (!isNaN(idNum)) {
|
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',
|
type: 'query',
|
||||||
query: {
|
query: {
|
||||||
'source-table': tableId,
|
'source-table': tableId,
|
||||||
'order-by': [['asc', ['field', 'id', { 'base-type': 'type/BigInteger' }]]],
|
'order-by': [['asc', ['field', 453, null]]],
|
||||||
filter: filters.length > 0
|
filter: filters.length > 0
|
||||||
? (filters.length === 1 ? filters[0] : ['and', ...filters])
|
? (filters.length === 1 ? filters[0] : ['and', ...filters])
|
||||||
: undefined
|
: undefined
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log('📊 Query a Metabase:', JSON.stringify(metabaseQuery, null, 2))
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await $fetch<MetabaseResponse>(`${metabaseUrl}/api/dataset`, {
|
const response = await $fetch<MetabaseResponse>(`${metabaseUrl}/api/dataset`, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
@@ -89,6 +94,8 @@ export default defineEventHandler(async (event): Promise<Contact[]> => {
|
|||||||
body: metabaseQuery
|
body: metabaseQuery
|
||||||
})
|
})
|
||||||
|
|
||||||
|
console.log('📊 Respuesta Metabase - filas:', response.data?.rows?.length || 0)
|
||||||
|
|
||||||
// Mapear columnas a objetos
|
// Mapear columnas a objetos
|
||||||
const cols = response.data.cols.map((col) => col.name)
|
const cols = response.data.cols.map((col) => col.name)
|
||||||
const contacts: Contact[] = response.data.rows.map((row) => {
|
const contacts: Contact[] = response.data.rows.map((row) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user