-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path53_BackupService.gs
More file actions
67 lines (59 loc) · 2.01 KB
/
Copy path53_BackupService.gs
File metadata and controls
67 lines (59 loc) · 2.01 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
/**
* BackupService - Serviço de Backup
* @version 1.0.0
*/
var BackupService = (function() {
var CONFIG = {
BACKUP_FOLDER_NAME: 'Backups_Sistema',
MAX_BACKUPS: 10
};
function createFull() {
try {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var folder = getOrCreateBackupFolder();
var timestamp = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), 'yyyy-MM-dd_HH-mm-ss');
var backupName = 'Backup_' + timestamp;
var backup = ss.copy(backupName);
var file = DriveApp.getFileById(backup.getId());
file.moveTo(folder);
cleanOldBackups(folder);
return { success: true, backupId: backup.getId(), backupName: backupName };
} catch (error) {
return { success: false, error: error.message };
}
}
function getOrCreateBackupFolder() {
var folders = DriveApp.getFoldersByName(CONFIG.BACKUP_FOLDER_NAME);
return folders.hasNext() ? folders.next() : DriveApp.createFolder(CONFIG.BACKUP_FOLDER_NAME);
}
function cleanOldBackups(folder) {
var files = folder.getFiles();
var backups = [];
while (files.hasNext()) {
var file = files.next();
backups.push({ file: file, date: file.getDateCreated() });
}
backups.sort(function(a, b) { return b.date - a.date; });
for (var i = CONFIG.MAX_BACKUPS; i < backups.length; i++) {
backups[i].file.setTrashed(true);
}
}
function listBackups() {
try {
var folder = getOrCreateBackupFolder();
var files = folder.getFiles();
var backups = [];
while (files.hasNext()) {
var file = files.next();
backups.push({ id: file.getId(), name: file.getName(), date: file.getDateCreated() });
}
return { success: true, backups: backups };
} catch (error) {
return { success: false, error: error.message };
}
}
return { createFull: createFull, listBackups: listBackups, getOrCreateBackupFolder: getOrCreateBackupFolder };
})();
function autoBackup() {
BackupService.createFull();
}