-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathdb.gs
112 lines (100 loc) · 3.14 KB
/
db.gs
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
// itemを追加
const spreadSheetID = PropertiesService.getScriptProperties().getProperty("SpreadSheetID")
const sheetName = "task"
function createItem(title,deadline){
var sheet = SpreadsheetApp.openById(spreadSheetID).getSheetByName(sheetName);
var lastRow = sheet.getLastRow();
var newRow = lastRow + 1;
var id = generateRandomString(8);
sheet.getRange(newRow, 1).setValue(id);
sheet.getRange(newRow, 2).setValue(title);
sheet.getRange(newRow, 3).setValue(deadline);
sheet.getRange(newRow, 4).setValue(false);
sheet.getRange(newRow, 5).setValue(Date());
return {
id: id,
title: title,
deadline: deadline,
isCompleted: false,
createdAt: Date(),
}
}
// itemを更新
function updateItem(id,title,deadline,isCompleted){
var sheet = SpreadsheetApp.openById(spreadSheetID).getSheetByName(sheetName);
var values = sheet.getDataRange().getValues();
for (var i = 1; i < values.length; i++) {
console.log(values[i][0])
if (id !== values[i][0]) continue
if(title) sheet.getRange(i+1,2).setValue(title)
if(deadline) sheet.getRange(i+1,3).setValue(deadline)
if(isCompleted !== null && isCompleted !== undefined) sheet.getRange(i+1,4).setValue(isCompleted)
}
}
// item一覧を取得
function getItems(filter=null){
var sheet = SpreadsheetApp.openById(spreadSheetID).getSheetByName(sheetName);
var values = sheet.getDataRange().getValues();
var items = [];
for (var i = 1; i < values.length; i++) {
if(filter?.deadline !== undefined && String(filter.deadline) !== String(values[i][2])){
continue
}
if(filter?.isCompleted !== undefined && filter.isCompleted !== values[i][3]){
console.log(filter.isCompleted,values[i][3])
continue
}
var item = {
id: values[i][0],
title: values[i][1],
deadline: values[i][2],
isCompleted: values[i][3],
createdAt: values[i][4],
};
items.push(item);
}
return items
}
// itemを取得
function getOneItem(id){
var sheet = SpreadsheetApp.openById(spreadSheetID).getSheetByName(sheetName);
var values = sheet.getDataRange().getValues();
for (var i = 1; i < values.length; i++) {
if(id !== values[i][0]) continue
var item = {
id: values[i][0],
title: values[i][1],
deadline: values[i][2],
isCompleted: values[i][3],
createdAt: values[i][4],
};
return item
}
}
// itemを削除
function deleteItem(id){
var sheet = SpreadsheetApp.openById(spreadSheetID).getSheetByName(sheetName);
var dataRange = sheet.getDataRange();
var values = dataRange.getValues();
for (var i = 1; i < values.length; i++) {
if (id !== values[i][0]) continue
var item = {
id: values[i][0],
title: values[i][1],
deadline: values[i][2],
isCompleted: values[i][3],
createdAt: values[i][4],
};
sheet.deleteRow(i + 1);
return item;
}
}
// idをランダム生成する関数
function generateRandomString(length) {
var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
var result = '';
for (var i = 0; i < length; i++) {
result += chars.charAt(Math.floor(Math.random() * chars.length));
}
return result;
}