-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
138 lines (93 loc) · 2.67 KB
/
index.js
File metadata and controls
138 lines (93 loc) · 2.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
const { GoogleSpreadsheet } = require('google-spreadsheet')
module.exports = (credentials) => {
if (!credentials) {
console.log("Error: No credentials provided.")
return
}
return {
doc: null,
async init(databaseId) {
this.doc = new GoogleSpreadsheet(databaseId);
await this.doc.useServiceAccountAuth(credentials);
await this.doc.loadInfo();
return this
},
async getProperties() {
return this.doc
},
async setProperties(properties) {
await this.doc.updateProperties(properties);
},
async getWorksheets() {
var list = await this.doc.sheetsById
var worksheets = []
for (index in list) {
worksheets.push(list[index]._rawProperties)
}
return worksheets
},
async setRow(worksheetName, rowId, object) {
rowId = parseInt(rowId)
var sheet = await this.getWorksheet(worksheetName)
if (!sheet) {
return false
}
var rows = await sheet.getRows()
var keys = Object.keys(object)
for (var i in keys) {
if (rows[rowId] && rows[rowId][keys[i]]) {
rows[rowId][keys[i]] = object[keys[i]]
rows[rowId].save()
} else {
console.log(`Row ${rowId} does not exists.`)
}
}
},
async addRow(worksheetName, value) {
var sheet = await this.getWorksheet(worksheetName)
if (!sheet) {
return false
}
await sheet.addRow(value)
},
async addRows(worksheetName, values) {
var sheet = await this.getWorksheet(worksheetName)
if (!sheet) {
return false
}
await sheet.addRows(values)
},
async getRows(worksheetName) {
var sheet = await this.getWorksheet(worksheetName)
var rows = await sheet.getRows()
var data = []
rows.map((row, index) => {
var item = {}
item.id = index
Object.keys(row).map(a => {
if (a !== '_sheet' && a !== '_rawData' && a !== 'id') {
item[a] = row[a]
}
})
delete item._rowNumber
data.push(item)
})
return data
},
async getWorksheet(worksheetName) {
var sheets = await this.getWorksheets()
var sheet = sheets.find(a => a.title === worksheetName || a.sheetId === worksheetName)
if (!sheet) {
return false
}
return this.doc.sheetsById[sheet.sheetId]
},
async setWorksheet(worksheetName, headerValues) {
const newSheet = await this.doc.addSheet({
title: worksheetName,
headerValues: headerValues
});
return newSheet
},
}
}