export {} import { BigQueryAdapter } from '../../adapters/gcp/bigquery' import { FirestoreAdapter } from '../../adapters/gcp/firestore' import { CustomError } from '../error' import { Utils } from '../BaseUtils' import getEntityDefinition from './getEntityDefinition' import defineQueryBigQuery from './defineQueryBigQuery' import performQueryBigQuery from './performQueryBigQuery' import normalizeResults from './normalizeResults' import getSchemaBigQuery from './getSchemaBigQuery' const $bq = new BigQueryAdapter() const $firestore = new FirestoreAdapter({ databaseId: 'settings' }) export class ApiUtils extends Utils { constructor() { super() } getEntityDefinition = async (req: any): Promise> => { try { return await getEntityDefinition(req, $firestore) } catch (error: any) { throw new CustomError( error.message ?? 'Unable to get entity definition', error.statusCode || 400 ) } } generateResponse = async (req: any): Promise> => { try { req.entityDef = await getEntityDefinition(req, $firestore) req.query = defineQueryBigQuery(req) req.queryResult = await performQueryBigQuery(req, $bq) const results = normalizeResults(req) return results } catch (error: any) { throw new CustomError( error.message ?? 'Unable to generate response', error.statusCode || 400 ) } } getSchema = async (req: any): Promise> => { try { return await getSchemaBigQuery(req, $bq) } catch (error: any) { throw new CustomError( error.message ?? 'Unable to determine schema', error.statusCode || 400 ) } } }