-
Notifications
You must be signed in to change notification settings - Fork 1
/
database-util.js
98 lines (88 loc) · 2.61 KB
/
database-util.js
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
var Crud = function(entity){
var dbEntity = entity;
var crud = {
readOne: function(model, success) {
db.load(function() {
dbEntity.load(model.id, function(item) {
model.set(item.toJSON());
success.success(model); // Success callback (will render the page)
});
}, auto_sync);
},
readAll: function(model, success) {
db.load(function() {
dbEntity.listItems().list(function(results) { // Asynchronously fetches the results matching the query
var resp = [];
results.forEach(function(item) { // Iterate over the results
resp.push(item.toJSON());
});
success.success(resp); // Success callback (will render the page)
});
}, auto_sync);
},
createAction: function(model, success) {
var item = new dbEntity();
// The constructor automatically generates an id
dbEntity.convertModel(item, model);
item.deleted = false;
item.dirty = true;
// item.lastChange = getEpoch(new Date());
persistence.add(item); // Add to database
model.set(item.toJSON());
// Save changes in localStorage (if using) and sync with server
db.save(function() {
//success.success(model); // Success callback (will render the page)
console.log("model saved");
}, item);
},
updateAction: function(model, success) {
dbEntity.load(model.id, function(item) {
dbEntity.convertModel(item, model);
item.deleted = false;
item.dirty = true;
// item.lastChange = getEpoch(new Date());
model.set(item.toJSON());
// Save changes in localStorage (if using) and sync with server
db.save(function() {
success.success(model); // Success callback (will render the page)
}, item);
});
},
deleteAction: function(model, success) {
dbEntity.load(model.id, function(item) {
item.deleted = !item.deleted; // Allow undo
item.dirty = true;
model.set(item.toJSON());
// Save changes in localStorage (if using) and sync with server
db.save(function() {
success.success(model); // Success callback (will render the page)
}, item);
});
}
}
return crud;
};
var CrudWrapper = function(crud){
var dbCrud = crud;
hybridSync = function(method, model, success, error) {
switch (method) {
case "read":
if (model.id) {
dbCrud.readOne(model, success);
} else {
dbCrud.readAll(model, success); // Useful for index view
}
break;
case "create":
dbCrud.createAction(model, success);
break;
case "update":
dbCrud.updateAction(model, success);
break;
case "delete":
dbCrud.deleteAction(model, success);
break;
}
};
return hybridSync;
};