ka1kuk commited on
Commit
9f49b1a
·
1 Parent(s): f1e4e01

Create store.js

Browse files
Files changed (1) hide show
  1. store.js +154 -0
store.js ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const { google } = require('googleapis');
2
+ const { v4: uuidv4 } = require('uuid');
3
+
4
+ // Replace with your Google Sheets ID and Sheet Name
5
+ const spreadsheetId = '1_TJeEsTmen7vMDQCpVckyRGVhlfdSnR-FCLnjyNuSck';
6
+ const sheetName = 'Sheet1';
7
+
8
+ async function getGoogleSheetsClient() {
9
+ const auth = new google.auth.GoogleAuth({
10
+ keyFile: 'credentials.json', // Update the path to your credentials
11
+ scopes: ['https://www.googleapis.com/auth/spreadsheets'],
12
+ });
13
+
14
+ const client = await auth.getClient();
15
+ const googleSheets = google.sheets({ version: 'v4', auth: client });
16
+ return googleSheets;
17
+ }
18
+
19
+ async function findAll() {
20
+ const googleSheets = await getGoogleSheetsClient();
21
+ const response = await googleSheets.spreadsheets.values.get({
22
+ spreadsheetId,
23
+ range: `${sheetName}`,
24
+ });
25
+ return response.data.values || [];
26
+ }
27
+
28
+ async function findById(id) {
29
+ const data = await findAll();
30
+ return data.find(row => row[0] === id) || null;
31
+ }
32
+
33
+ async function insert(data) {
34
+ const googleSheets = await getGoogleSheetsClient();
35
+ const id = uuidv4();
36
+ const values = [id, ...Object.values(data)];
37
+
38
+ await googleSheets.spreadsheets.values.append({
39
+ spreadsheetId,
40
+ range: `${sheetName}`,
41
+ valueInputOption: 'USER_ENTERED',
42
+ resource: { values: [values] },
43
+ });
44
+
45
+ return { id, ...data };
46
+ }
47
+
48
+ async function updateById(id, newData) {
49
+ const googleSheets = await getGoogleSheetsClient();
50
+ const existingData = await findAll();
51
+ const rowNumber = existingData.findIndex(row => row[0] === id);
52
+
53
+ if (rowNumber === -1) {
54
+ return null;
55
+ }
56
+
57
+ // Create an array that represents the updated row.
58
+ // Ensure the ID is preserved and newData is placed correctly.
59
+ const updatedRow = [id, ...Object.values(newData)];
60
+
61
+ const range = `${sheetName}!A${rowNumber + 1}`; // Assuming the ID is in column A
62
+ await googleSheets.spreadsheets.values.update({
63
+ spreadsheetId,
64
+ range,
65
+ valueInputOption: 'USER_ENTERED',
66
+ resource: { values: [updatedRow] },
67
+ });
68
+
69
+ return { id, ...newData };
70
+ }
71
+
72
+
73
+ async function deleteById(id) {
74
+ const googleSheets = await getGoogleSheetsClient();
75
+ const existingData = await findAll();
76
+ const rowNumber = existingData.findIndex(row => row[0] === id);
77
+
78
+ if (rowNumber === -1) {
79
+ return false;
80
+ }
81
+
82
+ const range = `${sheetName}!A${rowNumber + 1}:Z${rowNumber + 1}`;
83
+ await googleSheets.spreadsheets.values.clear({
84
+ spreadsheetId,
85
+ range,
86
+ });
87
+
88
+ return true;
89
+ }
90
+
91
+ async function createNewSheet(sheetTitle) {
92
+ const googleSheets = await getGoogleSheetsClient();
93
+
94
+ const request = {
95
+ spreadsheetId,
96
+ resource: {
97
+ requests: [{
98
+ addSheet: {
99
+ properties: {
100
+ title: sheetTitle
101
+ }
102
+ }
103
+ }]
104
+ }
105
+ };
106
+
107
+ await googleSheets.spreadsheets.batchUpdate(request);
108
+ return `Sheet ${sheetTitle} created`;
109
+ }
110
+ async function getSheetNames() {
111
+ const googleSheets = await getGoogleSheetsClient();
112
+ const response = await googleSheets.spreadsheets.get({
113
+ spreadsheetId,
114
+ });
115
+
116
+ const sheets = response.data.sheets;
117
+ return sheets.map(sheet => sheet.properties.title);
118
+ }
119
+ async function deleteSheet(sheetName) {
120
+ const googleSheets = await getGoogleSheetsClient();
121
+
122
+ // First, get the ID of the sheet you want to delete
123
+ const spreadsheetData = await googleSheets.spreadsheets.get({
124
+ spreadsheetId,
125
+ });
126
+
127
+ const sheet = spreadsheetData.data.sheets.find(s => s.properties.title === sheetName);
128
+ if (!sheet) {
129
+ throw new Error(`Sheet with name "${sheetName}" not found`);
130
+ }
131
+
132
+ const sheetId = sheet.properties.sheetId;
133
+
134
+ // Now, delete the sheet with the found ID
135
+ await googleSheets.spreadsheets.batchUpdate({
136
+ spreadsheetId,
137
+ resource: {
138
+ requests: [
139
+ {
140
+ deleteSheet: {
141
+ sheetId,
142
+ },
143
+ },
144
+ ],
145
+ },
146
+ });
147
+
148
+ return `Sheet "${sheetName}" deleted`;
149
+ }
150
+
151
+
152
+
153
+ // Export the functions for use in other files
154
+ module.exports = { findAll, findById, insert, updateById, deleteById, createNewSheet, getSheetNames, deleteSheet };