|
|
const { google } = require('googleapis'); |
|
|
const { v4: uuidv4 } = require('uuid'); |
|
|
|
|
|
|
|
|
const spreadsheetId = '1_TJeEsTmen7vMDQCpVckyRGVhlfdSnR-FCLnjyNuSck'; |
|
|
const sheetName = 'Sheet1'; |
|
|
|
|
|
async function getGoogleSheetsClient() { |
|
|
const auth = new google.auth.GoogleAuth({ |
|
|
keyFile: 'credentials.json', |
|
|
scopes: ['https://www.googleapis.com/auth/spreadsheets'], |
|
|
}); |
|
|
|
|
|
const client = await auth.getClient(); |
|
|
const googleSheets = google.sheets({ version: 'v4', auth: client }); |
|
|
return googleSheets; |
|
|
} |
|
|
|
|
|
async function findAll() { |
|
|
const googleSheets = await getGoogleSheetsClient(); |
|
|
const response = await googleSheets.spreadsheets.values.get({ |
|
|
spreadsheetId, |
|
|
range: `${sheetName}`, |
|
|
}); |
|
|
return response.data.values || []; |
|
|
} |
|
|
|
|
|
async function findById(id) { |
|
|
const data = await findAll(); |
|
|
return data.find(row => row[0] === id) || null; |
|
|
} |
|
|
|
|
|
async function insert(data) { |
|
|
const googleSheets = await getGoogleSheetsClient(); |
|
|
const id = uuidv4(); |
|
|
const values = [id, ...Object.values(data)]; |
|
|
|
|
|
await googleSheets.spreadsheets.values.append({ |
|
|
spreadsheetId, |
|
|
range: `${sheetName}`, |
|
|
valueInputOption: 'USER_ENTERED', |
|
|
resource: { values: [values] }, |
|
|
}); |
|
|
|
|
|
return { id, ...data }; |
|
|
} |
|
|
|
|
|
async function updateById(id, newData) { |
|
|
const googleSheets = await getGoogleSheetsClient(); |
|
|
const existingData = await findAll(); |
|
|
const rowNumber = existingData.findIndex(row => row[0] === id); |
|
|
|
|
|
if (rowNumber === -1) { |
|
|
return null; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const updatedRow = [id, ...Object.values(newData)]; |
|
|
|
|
|
const range = `${sheetName}!A${rowNumber + 1}`; |
|
|
await googleSheets.spreadsheets.values.update({ |
|
|
spreadsheetId, |
|
|
range, |
|
|
valueInputOption: 'USER_ENTERED', |
|
|
resource: { values: [updatedRow] }, |
|
|
}); |
|
|
|
|
|
return { id, ...newData }; |
|
|
} |
|
|
|
|
|
|
|
|
async function deleteById(id) { |
|
|
const googleSheets = await getGoogleSheetsClient(); |
|
|
const existingData = await findAll(); |
|
|
const rowNumber = existingData.findIndex(row => row[0] === id); |
|
|
|
|
|
if (rowNumber === -1) { |
|
|
return false; |
|
|
} |
|
|
|
|
|
const range = `${sheetName}!A${rowNumber + 1}:Z${rowNumber + 1}`; |
|
|
await googleSheets.spreadsheets.values.clear({ |
|
|
spreadsheetId, |
|
|
range, |
|
|
}); |
|
|
|
|
|
return true; |
|
|
} |
|
|
|
|
|
async function createNewSheet(sheetTitle) { |
|
|
const googleSheets = await getGoogleSheetsClient(); |
|
|
|
|
|
const request = { |
|
|
spreadsheetId, |
|
|
resource: { |
|
|
requests: [{ |
|
|
addSheet: { |
|
|
properties: { |
|
|
title: sheetTitle |
|
|
} |
|
|
} |
|
|
}] |
|
|
} |
|
|
}; |
|
|
|
|
|
await googleSheets.spreadsheets.batchUpdate(request); |
|
|
return `Sheet ${sheetTitle} created`; |
|
|
} |
|
|
async function getSheetNames() { |
|
|
const googleSheets = await getGoogleSheetsClient(); |
|
|
const response = await googleSheets.spreadsheets.get({ |
|
|
spreadsheetId, |
|
|
}); |
|
|
|
|
|
const sheets = response.data.sheets; |
|
|
return sheets.map(sheet => sheet.properties.title); |
|
|
} |
|
|
async function deleteSheet(sheetName) { |
|
|
const googleSheets = await getGoogleSheetsClient(); |
|
|
|
|
|
|
|
|
const spreadsheetData = await googleSheets.spreadsheets.get({ |
|
|
spreadsheetId, |
|
|
}); |
|
|
|
|
|
const sheet = spreadsheetData.data.sheets.find(s => s.properties.title === sheetName); |
|
|
if (!sheet) { |
|
|
throw new Error(`Sheet with name "${sheetName}" not found`); |
|
|
} |
|
|
|
|
|
const sheetId = sheet.properties.sheetId; |
|
|
|
|
|
|
|
|
await googleSheets.spreadsheets.batchUpdate({ |
|
|
spreadsheetId, |
|
|
resource: { |
|
|
requests: [ |
|
|
{ |
|
|
deleteSheet: { |
|
|
sheetId, |
|
|
}, |
|
|
}, |
|
|
], |
|
|
}, |
|
|
}); |
|
|
|
|
|
return `Sheet "${sheetName}" deleted`; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
module.exports = { findAll, findById, insert, updateById, deleteById, createNewSheet, getSheetNames, deleteSheet }; |
|
|
|