60 lines
1.5 KiB
TypeScript
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;
|
|
}
|
|
}
|