splid-js-googlesheet-updater/app.js
2025-05-27 21:06:02 +02:00

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);