Files
analiticaNucleo/nuxt4-app/server/api/metabase/query.post.ts
josedario87 4b25a70b8b
All checks were successful
build-and-deploy / build (push) Successful in 45s
build-and-deploy / deploy (push) Successful in 3s
feat: add Metabase API integration
Add complete integration with Metabase API to fetch data from
'facturador supabase' database.

Features:
- Server-side Metabase authentication using session tokens
- Utility functions for Metabase API requests with auto-retry
- API endpoints to proxy Metabase requests
  - GET /api/metabase/databases - List all databases
  - GET /api/metabase/tables/:databaseId - Get tables and metadata
  - POST /api/metabase/query - Execute queries against tables
- useMetabase() composable for frontend consumption
  - getDatabases() - Fetch available databases
  - getDatabaseMetadata() - Get tables and fields info
  - queryTable() - Execute queries with filters and limits
  - resultToObjects() - Helper to convert results to objects

Session tokens are cached and auto-refreshed when expired.
This enables the application to display real data from the
facturador database without using embeds or iframes.
2025-10-13 17:46:48 -06:00

31 lines
721 B
TypeScript

/**
* Execute a query against Metabase
*/
export default defineEventHandler(async (event) => {
const body = await readBody(event)
const { databaseId, tableId, query } = body
if (!databaseId || !tableId) {
throw createError({
statusCode: 400,
statusMessage: 'Database ID and Table ID are required'
})
}
try {
const result = await queryMetabaseTable(
parseInt(databaseId),
parseInt(tableId),
query
)
return result
} catch (error: any) {
console.error('[API] Failed to execute Metabase query:', error)
throw createError({
statusCode: error.statusCode || 500,
statusMessage: error.statusMessage || 'Failed to execute query'
})
}
})