From 46125f8b716b63e53f68195e28c739bfc14c8d8c Mon Sep 17 00:00:00 2001 From: karishmas6 Date: Thu, 19 Sep 2024 17:50:59 +0530 Subject: [PATCH] refactor: move gsheet integration logic --- .../integrations/gsheet.ts | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/server/src/workflow-management/integrations/gsheet.ts b/server/src/workflow-management/integrations/gsheet.ts index 9e1a6d95..8f0baaf4 100644 --- a/server/src/workflow-management/integrations/gsheet.ts +++ b/server/src/workflow-management/integrations/gsheet.ts @@ -2,6 +2,52 @@ import { google } from "googleapis"; import fs from 'fs'; import path from 'path'; import logger from "../../logger"; +import { readFile } from "../storage"; + +// *** Temporary Path to the JSON file that will store the integration details *** +const integrationsFilePath = path.join(__dirname, 'integrations.json'); + +export function loadIntegrations() { + if (fs.existsSync(integrationsFilePath)) { + const data = fs.readFileSync(integrationsFilePath, 'utf-8'); + return JSON.parse(data); + } + return {}; +} + +export function saveIntegrations(integrations: any) { + fs.writeFileSync(integrationsFilePath, JSON.stringify(integrations, null, 2)); +} + +export async function updateGoogleSheet(fileName: string, runId: string) { + try { + const run = await readFile(`./../storage/runs/${fileName}_${runId}.json`); + const parsedRun = JSON.parse(run); + + if (parsedRun.status === 'success' && parsedRun.serializableOutput) { + const data = parsedRun.serializableOutput['item-0'] as { [key: string]: any }[]; + const integrationConfig = await loadIntegrations(); + + if (integrationConfig) { + const { spreadsheetId, range, credentials } = integrationConfig; + + if (spreadsheetId && range && credentials) { + // Convert data to Google Sheets format (headers and rows) + const headers = Object.keys(data[0]); + const rows = data.map((row: { [key: string]: any }) => Object.values(row)); + const outputData = [headers, ...rows]; + + await writeDataToSheet(spreadsheetId, range, outputData); + logger.log('info', `Data written to Google Sheet successfully for ${fileName}_${runId}`); + } + } + logger.log('error', `Google Sheet integration not configured for ${fileName}_${runId}`); + } + logger.log('error', `Run not successful or no data to update for ${fileName}_${runId}`); + } catch (error: any) { + logger.log('error', `Failed to write data to Google Sheet for ${fileName}_${runId}: ${error.message}`); + } +}; export async function writeDataToSheet(spreadsheetId: string, range: string, data: any[]) { try {