Files
analiticaNucleo/nuxt4-app/server/api/metabase/opciones-filtros.get.ts
josedario87 a496029895
All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 45s
Fix: corregir nombres de columnas en opciones-filtros (disponibles/cafe)
2025-10-29 19:21:58 -06:00

86 lines
2.7 KiB
TypeScript

/**
* Get filter options from Metabase
* Uses "Informe Ingresos - Opciones de Filtros" query (ID: 53)
* Returns: ubicaciones, calidades, tipos, estados as arrays
*/
export default defineEventHandler(async () => {
try {
// Get all cards to find the opciones query
const allCards = await getMetabaseCards('all')
// Log available cards for debugging
const informeCards = allCards.filter((c: any) => c.name.includes('Informe'))
console.log('[API] Available Informe cards:', informeCards.map((c: any) => ({ id: c.id, name: c.name })))
// Find "Informe Ingresos - Opciones de Filtros" query
const card = allCards.find((c: any) => c.name === 'Informe Ingresos - Opciones de Filtros')
if (!card) {
console.warn('[API] Opciones de Filtros query not found, returning empty options')
console.warn('[API] Searched for: "Informe Ingresos - Opciones de Filtros"')
return {
ubicaciones: [],
calidades: [],
tipos: [],
estados: []
}
}
console.log('[API] Found Opciones de Filtros card:', card.id, card.name)
// Execute the query (no parameters needed)
const result = await executeCardQuery(card.id, [])
console.log('[API] Query result:', {
hasData: !!result.data,
rows: result.data?.rows?.length,
cols: result.data?.cols?.length,
firstRow: result.data?.rows?.[0]
})
if (!result.data?.rows?.[0] || !result.data?.cols) {
return {
ubicaciones: [],
calidades: [],
tipos: [],
estados: []
}
}
const row = result.data.rows[0]
const cols = result.data.cols
// Transform to object
const data: any = {}
cols.forEach((col: any, index: number) => {
data[col.name] = row[index]
})
console.log('[API] Transformed data object:', data)
console.log('[API] Column names:', cols.map((c: any) => c.name))
// Parse arrays - some come as JSON strings, others as arrays
const parseIfString = (value: any) => {
if (typeof value === 'string') {
return JSON.parse(value)
}
return value
}
return {
ubicaciones: data.ubicaciones_disponibles ? parseIfString(data.ubicaciones_disponibles) : [],
calidades: data.calidades_disponibles ? parseIfString(data.calidades_disponibles) : [],
tipos: data.tipos_cafe ? parseIfString(data.tipos_cafe) : [],
estados: data.estados_disponibles ? parseIfString(data.estados_disponibles) : []
}
} catch (error: any) {
console.error('[API] Failed to fetch opciones de filtros from Metabase:', error)
// Don't fail, just return empty options
return {
ubicaciones: [],
calidades: [],
tipos: [],
estados: []
}
}
})