database to google sheets added send to google apis from cloud console

This commit is contained in:
Esteban 2026-02-13 11:42:11 -05:00
parent 667334bae5
commit 04ec0df522
4 changed files with 1081 additions and 32 deletions

1006
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -19,6 +19,7 @@
"astro-google-analytics": "^1.0.3", "astro-google-analytics": "^1.0.3",
"astro-icon": "^1.1.5", "astro-icon": "^1.1.5",
"dayjs": "^1.11.19", "dayjs": "^1.11.19",
"googleapis": "^171.4.0",
"swiper": "^12.1.0", "swiper": "^12.1.0",
"tailwindcss": "^4.1.18" "tailwindcss": "^4.1.18"
}, },

View File

@ -1,18 +1,19 @@
import type { APIRoute } from "astro"; import type { APIRoute } from "astro";
import { appendToSheet } from "../lib/googleSheets";
export const prerender = false; export const prerender = false;
export const POST: APIRoute = async ({ request }) => { export const POST: APIRoute = async ({ request }) => {
try { try {
// 🔹 Leer datos del formulario // 🔹 Leer datos del formulario
const formData = await request.formData(); const formData = await request.formData();
const nombres = formData.get("nombres")?.toString().trim(); const nombres = formData.get("nombres")?.toString().trim();
const apellidos = formData.get("apellidos")?.toString().trim(); const apellidos = formData.get("apellidos")?.toString().trim();
const pais = formData.get("pais")?.toString().trim(); const pais = formData.get("pais")?.toString().trim();
const lugar = formData.get("lugar")?.toString().trim(); const lugar = formData.get("lugar")?.toString().trim();
const direccion = formData.get("direccion")?.toString().trim(); const direccion = formData.get("direccion")?.toString().trim();
const telefono = formData.get("telefono")?.toString().trim(); const telefono = formData.get("telefono")?.toString().trim();
const email = formData.get("email")?.toString().trim(); const email = formData.get("email")?.toString().trim();
// 🔹 Validación básica // 🔹 Validación básica
@ -21,32 +22,45 @@ export const POST: APIRoute = async ({ request }) => {
} }
const dataSend = { const dataSend = {
nombres, nombres,
apellidos, apellidos,
pais, pais,
lugar, lugar,
direccion, direccion,
telefono, telefono,
email email
}; };
console.log(dataSend)
const emailApiKey = import.meta.env.EMAIL_API_KEY; const emailApiKey = import.meta.env.EMAIL_API_KEY;
// 🔹 Enviar a tu backend real const valuesForSheets = [
const response = await fetch("http://155.138.215.11:3050/email/send", { nombres,
method: "POST", apellidos,
headers: { pais,
"Content-Type": "application/json", lugar,
"x-api-key": emailApiKey!, direccion,
}, telefono,
body: JSON.stringify({ email,
type: "CENTRO_DEL_REINO_PAZ_Y_JUSTICIA_POSTULACION", new Date().toLocaleString()
data: dataSend, ];
}),
});
console.log(response) // 🔹 Enviar a tu backend real
if (!response.ok) { const [emailResponse] = await Promise.all([
fetch("http://155.138.215.11:3050/email/send", {
method: "POST",
headers: {
"Content-Type": "application/json",
"x-api-key": emailApiKey!,
},
body: JSON.stringify({
type: "CENTRO_DEL_REINO_PAZ_Y_JUSTICIA_POSTULACION",
data: dataSend,
}),
}),
appendToSheet(valuesForSheets) // Guardar en Google Sheets
]);
// console.log(emailResponse)
if (!emailResponse.ok) {
return new Response(null, { return new Response(null, {
status: 302, status: 302,
headers: { headers: {

View File

@ -0,0 +1,28 @@
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 appendToSheet(values: any[]) {
try {
await sheets.spreadsheets.values.append({
spreadsheetId: SPREADSHEET_ID,
range: 'DATABASE!A2:H2',
valueInputOption: 'RAW',
requestBody: {
values: [values],
},
});
} catch (error) {
console.error('Error guardando en Sheets:', error);
throw error;
}
}