53 lines
1.6 KiB
JavaScript
53 lines
1.6 KiB
JavaScript
/**
|
|
* Netlify Function to fetch Google Sheets data securely
|
|
* Credentials are stored as environment variables, not exposed to frontend
|
|
*/
|
|
|
|
exports.handler = async (event) => {
|
|
try {
|
|
// Read credentials from environment variables (set in Netlify UI)
|
|
const sheetId = process.env.GOOGLE_SHEET_ID;
|
|
const sheetPassword = process.env.GOOGLE_SHEET_PASSWORD; // If needed for authentication
|
|
|
|
if (!sheetId) {
|
|
return {
|
|
statusCode: 500,
|
|
body: JSON.stringify({ error: 'GOOGLE_SHEET_ID not configured' })
|
|
};
|
|
}
|
|
|
|
// Construct the export URL
|
|
const csvUrl = `https://docs.google.com/spreadsheets/d/${sheetId}/export?format=csv`;
|
|
|
|
// Fetch the CSV from Google Sheets
|
|
const response = await fetch(csvUrl);
|
|
|
|
if (!response.ok) {
|
|
return {
|
|
statusCode: response.status,
|
|
body: JSON.stringify({ error: `Google Sheets returned ${response.status}` })
|
|
};
|
|
}
|
|
|
|
const csv = await response.text();
|
|
|
|
return {
|
|
statusCode: 200,
|
|
headers: {
|
|
'Content-Type': 'text/csv',
|
|
'Cache-Control': 'max-age=300' // Cache for 5 minutes
|
|
},
|
|
body: csv
|
|
};
|
|
} catch (error) {
|
|
console.error('Error fetching Google Sheet:', error);
|
|
return {
|
|
statusCode: 500,
|
|
body: JSON.stringify({
|
|
error: 'Failed to fetch data',
|
|
message: error.message
|
|
})
|
|
};
|
|
}
|
|
};
|