All checks were successful
build-and-deploy / build-and-deploy (push) Successful in 46s
76 lines
2.3 KiB
TypeScript
76 lines
2.3 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]
|
|
})
|
|
|
|
// Parse JSON arrays
|
|
return {
|
|
ubicaciones: data.ubicaciones ? JSON.parse(data.ubicaciones) : [],
|
|
calidades: data.calidades ? JSON.parse(data.calidades) : [],
|
|
tipos: data.tipos ? JSON.parse(data.tipos) : [],
|
|
estados: data.estados ? JSON.parse(data.estados) : []
|
|
}
|
|
} 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: []
|
|
}
|
|
}
|
|
})
|