duplicate-record-validation #8

Merged
esteban merged 2 commits from duplicate-record-validation into main 2026-02-14 20:47:57 +00:00
1 changed files with 48 additions and 2 deletions
Showing only changes of commit 6c74b0b242 - Show all commits

View File

@ -11,17 +11,63 @@ const auth = new google.auth.GoogleAuth({
const sheets = google.sheets({ version: 'v4', auth }); const sheets = google.sheets({ version: 'v4', auth });
const SPREADSHEET_ID = import.meta.env.GOOGLE_SHEET_ID; const SPREADSHEET_ID = import.meta.env.GOOGLE_SHEET_ID;
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[]) { export async function appendToSheet(values: any[]) {
try { try {
const email = values[6]; // índice donde está el email en tu array
if (!email) {
throw new Error('Email requerido');
}
const exists = await emailExists(email);
if (exists) {
return {
success: false,
message: 'El email ya existe en la base de datos',
};
}
await sheets.spreadsheets.values.append({ await sheets.spreadsheets.values.append({
spreadsheetId: SPREADSHEET_ID, spreadsheetId: SPREADSHEET_ID,
range: 'DATABASE!A2:H2', range: 'DATABASE!A:H',
valueInputOption: 'RAW', valueInputOption: 'RAW',
requestBody: { requestBody: {
values: [values], values: [values],
}, },
}); });
return {
success: true,
message: 'Registro guardado correctamente',
};
} catch (error) { } catch (error) {
throw error; throw error;
} }
} }