cdrdpyj/src/pages/api/lib/googleSheets.ts

60 lines
1.5 KiB
TypeScript

import { google } from 'googleapis';
const auth = new google.auth.GoogleAuth({
credentials: {
client_email: import.meta.env.GOOGLE_SERVICE_ACCOUNT_EMAIL,
private_key: import.meta.env.GOOGLE_PRIVATE_KEY?.replace(/\\n/g, '\n'),
},
scopes: ['https://www.googleapis.com/auth/spreadsheets'],
});
const sheets = google.sheets({ version: 'v4', auth });
const SPREADSHEET_ID = import.meta.env.GOOGLE_SHEET_ID;
export async function emailExists(email: string): Promise<boolean> {
const formula = `=COUNTIF(G:G,"${email}")`;
// Escribir fórmula en celda auxiliar
await sheets.spreadsheets.values.update({
spreadsheetId: SPREADSHEET_ID,
range: 'DATABASE!Z1', // usa una columna libre
valueInputOption: 'USER_ENTERED',
requestBody: {
values: [[formula]],
},
});
// Leer resultado calculado
const result = await sheets.spreadsheets.values.get({
spreadsheetId: SPREADSHEET_ID,
range: 'DATABASE!Z1',
valueRenderOption: 'UNFORMATTED_VALUE',
});
const count = result.data.values?.[0]?.[0] || 0;
return Number(count) > 0;
}
export async function appendToSheet(values: any[]) {
try {
await sheets.spreadsheets.values.append({
spreadsheetId: SPREADSHEET_ID,
range: 'DATABASE!A2:H2',
valueInputOption: 'RAW',
requestBody: {
values: [values],
},
});
return {
success: true,
message: 'Registro guardado correctamente',
};
} catch (error) {
throw error;
}
}