101 lines
No EOL
2.8 KiB
JavaScript
101 lines
No EOL
2.8 KiB
JavaScript
import { SplidClient } from 'splid-js';
|
|
import {google} from "googleapis";
|
|
|
|
const spreadsheetId = '1RxeQTnirJILgqXDuvI2RQt9vljn1Jz_JFCzVDRQviIg';
|
|
// Create a reusable sheets API client
|
|
async function createSheetsClient() {
|
|
const auth = new google.auth.GoogleAuth({
|
|
keyFile: 'epic-c381a-c7475e0b43cc.json',
|
|
scopes: ['https://www.googleapis.com/auth/spreadsheets'],
|
|
});
|
|
|
|
return google.sheets({ version: 'v4', auth });
|
|
}
|
|
|
|
// Get data from Google Sheets
|
|
async function getSheetData(spreadsheetId, range) {
|
|
try {
|
|
const sheets = await createSheetsClient();
|
|
const response = await sheets.spreadsheets.values.get({
|
|
spreadsheetId,
|
|
range
|
|
});
|
|
return response.data.values;
|
|
} catch (err) {
|
|
console.error('Error getting sheet data:', err);
|
|
throw err;
|
|
}
|
|
}
|
|
|
|
// Update data in Google Sheets
|
|
async function updateSheetData(spreadsheetId, range, values) {
|
|
try {
|
|
const sheets = await createSheetsClient();
|
|
const response = await sheets.spreadsheets.values.update({
|
|
spreadsheetId,
|
|
range,
|
|
valueInputOption: 'USER_ENTERED',
|
|
resource: { values },
|
|
});
|
|
return response.data;
|
|
} catch (err) {
|
|
console.error('Error updating sheet data:', err);
|
|
throw err;
|
|
}
|
|
}
|
|
|
|
async function getSplidData(splidCode) {
|
|
const splid = new SplidClient();
|
|
const groupRes = await splid.group.getByInviteCode(splidCode);
|
|
|
|
const groupId = groupRes.result.objectId;
|
|
|
|
const groupInfo = await splid.groupInfo.getOneByGroup(groupId);
|
|
const members = await splid.person.getAllByGroup(groupId);
|
|
const expensesAndPayments = await splid.entry.getAllByGroup(groupId);
|
|
|
|
const balance = SplidClient.getBalance(
|
|
members,
|
|
expensesAndPayments,
|
|
groupInfo
|
|
);
|
|
const suggestedPayments = SplidClient.getSuggestedPayments(balance);
|
|
|
|
return balance;
|
|
}
|
|
|
|
async function resetTableData() {
|
|
// Define a reasonable number of rows to clear/fill (adjust as needed)
|
|
const rowCount = 100;
|
|
|
|
// Create an array of arrays with "-" for each cell in columns E through L
|
|
const dashData = Array(rowCount).fill().map(() => Array(9).fill("-"));
|
|
|
|
try {
|
|
await updateSheetData(spreadsheetId, 'Splidy!E2:M', dashData);
|
|
} catch (err) {
|
|
console.error('Error resetting table data:', err);
|
|
throw err;
|
|
}
|
|
}
|
|
|
|
async function main() {
|
|
|
|
const splidCodes = await getSheetData(spreadsheetId, 'Splidy!C2:C');
|
|
const userTags = await getSheetData(spreadsheetId, 'Splidy!E1:M1');
|
|
|
|
console.log(splidCodes);
|
|
await resetTableData();
|
|
|
|
for (const splidCode of splidCodes) {
|
|
const splidCodeString = splidCode[0];
|
|
if (!splidCodeString) {
|
|
continue;
|
|
}
|
|
console.log(`Processing Splid code: ${splidCodeString}`);
|
|
const balance = await getSplidData(splidCodeString);
|
|
console.log(balance);
|
|
}
|
|
}
|
|
|
|
main().catch(console.error); |